J'utilise zsh sur Ubuntu et j'ai créé un lien symbolique pour bat ainsi :
ln -s /usr/bin/batcat /home/user_name/.local/bin/bat
frapper ls -l depuis ~/.local/bin affiche :
lrwxrwxrwx 1 tux tux 15 May 19 13:47 bat -> /usr/bin/batcat
Maintenant depuis n'importe quel répertoire (même dans ~/.local/bin ),
Si je lance bat , j'obtiens command not found: bat . Exécutant également ~/.local/bin ne fonctionne pas. Cependant, en exécutant ./bat (depuis ~/.local/bin ) fonctionne. Exécution de batcat fonctionne également.
echo $PATH montre que ~/.local/bin est dans le chemin
Qu'est-ce qui pourrait mal se passer ici ? aucun lien symbolique ne fonctionne, bat n'est qu'un exemple
PS Dans bash, tout fonctionne comme prévu
Réponse acceptée :
Si votre PATH contient en fait ~/.local/bin avec le caractère tilde littéral :cela ne fonctionnera pas. Le tilde doit être étendu à votre répertoire personnel.
Par exemple, chacune de ces lignes est correcte dans zsh, bash ou tout autre shell de type sh :
PATH=~/.local/bin:$PATH
PATH=$PATH:~/.local/bin
PATH=~/.local/bin:"$PATH"
PATH="$PATH":~/.local/bin
export PATH="$HOME/.local/bin:$PATH"
export PATH="$PATH:$HOME/.local/bin"
Ils fonctionnent parce que ~ est étendu au répertoire personnel lorsqu'il se trouve au début d'un mot, immédiatement après le signe égal dans une affectation ou immédiatement après un : dans la partie droite d'une affectation (le but de cette dernière règle est précisément de faciliter le réglage de PATH ).
Mais une ligne comme PATH="~/.local/bin:$PATH" ne fonctionnera pas, car ~ n'est pas développé entre guillemets doubles, donc la valeur de PATH finit par contenir le caractère littéral ~ . Ce PATH fait référence à un répertoire appelé ~ dans le répertoire courant, pas votre répertoire personnel.
Bash¹ a une fonctionnalité dans laquelle ~ est interprété comme le répertoire personnel au début des entrées de chemin. Donc PATH="~/.local/bin:$PATH" fonctionne partiellement dans bash. Cependant, cela ne fonctionne que lorsque vous exécutez un programme directement à partir de bash, pas lorsque des programmes autres que bash eux-mêmes démarrent des programmes. Donc, même si vous utilisez bash, ne mettez pas un ~ littéral dans le chemin, assurez-vous qu'il est développé ou utilisez $HOME à la place.