GNU/Linux >> Tutoriels Linux >  >> Linux

Commande introuvable dans Zsh, mais trouvée dans Bash ?

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.


Linux
  1. gestionnaire d'abonnement :commande introuvable

  2. id :commande introuvable

  3. w :commande introuvable

  4. df :commande introuvable

  5. du :commande introuvable

Dépannage de l'erreur "Bash :Commande introuvable" sous Linux

Commande introuvable dans Bash corrigé

nc :commande introuvable

aws-shell :commande introuvable

ln :commande introuvable

bash sh - commande introuvable