zsh
est l'un des rares shells (les autres étant tcsh
(à l' which
origine un csh
script pour les csh
utilisateurs, qui avait aussi sa limitation, en a tcsh
fait un intégré comme une amélioration)) où which
fait quelque chose de sensé car c'est un shell intégré, mais en quelque sorte vous ou votre système d'exploitation (via un rc
fichier) l'a cassé en le remplaçant par un appel à la which
commande système qui ne peut rien faire de manière fiable car il n'a pas accès aux internes du shell donc ne peut pas savoir comment ce shell interprète un nom de commande .
En zsh, tous which
, type
, whence
et where
sont des commandes qui sont builtin tous utilisés pour en savoir plus sur ce que les commandes sont, mais avec des sorties différentes. Ils sont tous là pour des raisons historiques, vous pouvez obtenir tous les comportements avec des drapeaux différents pour la whence
commande.
Vous pouvez obtenir les détails de ce que chacun fait en exécutant:
info -f zsh --index-search=which
Ou tapez info zsh
, puis i
affichez l'index avec et entrez le nom intégré (l'achèvement est disponible).
Et évitez d'utiliser /usr/bin/which
. Il n'y a pas d'obus de nos jours là où cela which
est nécessaire. Comme le dit Timothy, utilisez la fonction intégrée que votre shell fournit pour cela. La plupart des shells POSIX auront la type
commande, et vous pouvez utiliser command -v
pour obtenir uniquement le chemin d'une commande (bien que les deux type
et command -v
soient optionnels dans POSIX (mais pas Unix, et plus dans LSB), ils sont disponibles dans la plupart sinon la totalité des Coquilles de type Bourne que vous rencontrerez probablement jamais).
(BTW, on dirait qu'il /usr/bin
apparaît deux fois dans votre $PATH
, vous pouvez ajouter un typeset -U path
à votre ~/.zshrc
)