zsh
ist eine der wenigen Shells (die anderen sind tcsh
( which
ursprünglich als csh
Skript für csh
Benutzer tcsh
gedacht , was ebenfalls eine Einschränkung darstellte )), in denen which
etwas Sinnvolles getan wird, da es eine eingebaute Shell ist, aber irgendwie Sie oder Ihr Betriebssystem (über eine rc
Datei) hat es durch einen Aufruf des Systembefehls ersetzt, which
der nichts Sinnvolles zuverlässig tun kann, da er keinen Zugriff auf die Interns der Shell hat und daher nicht weiß, wie diese Shell einen Befehlsnamen interpretiert .
In zsh, alle which
, type
, whence
und where
sind builtin Befehle , die alle verwendet , um herauszufinden , über das , was Befehle, aber mit unterschiedlichen Ausgängen. Sie sind alle aus historischen Gründen da, Sie können alle ihre Verhaltensweisen mit verschiedenen Flags auf den whence
Befehl bekommen.
Sie können die Details der einzelnen Aktionen abrufen, indem Sie Folgendes ausführen:
info -f zsh --index-search=which
Oder geben Sie ein info zsh
, i
rufen Sie den Index mit auf und geben Sie den eingebauten Namen ein (die Vervollständigung ist verfügbar).
Und vermeiden Sie die Verwendung /usr/bin/which
. Es gibt heutzutage keine Shell, in der das which
benötigt wird. Verwenden Sie, wie Timothy sagt, das eingebaute Element, das Ihre Shell dafür bereitstellt. Die meisten POSIX-Shells haben den type
Befehl, und Sie können command -v
nur den Pfad eines Befehls abrufen (obwohl beide type
und command -v
in POSIX optional sind (aber nicht Unix und nicht mehr in LSB), sind sie in den meisten, wenn nicht allen, verfügbar Bourne-ähnliche Muscheln, auf die Sie wahrscheinlich jemals stoßen werden).
(Übrigens, es sieht aus wie /usr/bin
erscheint zweimal in Ihrem $PATH
, können Sie eine hinzufügen , typeset -U path
um Ihre ~/.zshrc
)