Ich habe ein seltsames Verhalten mit zsh (5.4.2_1 installiert mit Homebrew) auf osx, das nicht das erste Auftreten einer ausführbaren Datei im Pfad verwendet.
Hier ist das Szenario:
echo $PATH
kehrt zurück:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Brauen ist in beiden
/usr/local/Cellar/zplug/HEAD-9fdb388/bin
und
usr/local/bin/brew
Dies wird dadurch bestätigt, dass ausgeführt wird, welches -a Gebräu welches zurückgibt:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
/usr/local/bin/brew
Aber wenn ich laufen lasse, welches Gebräu es zurückbringt:
/usr/local/bin/brew
und brauen läuft /usr/local/bin/brew
eher als/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
Wie kann das passieren, wenn das Brauen früher im Weg ist?
Hilfe geschätzt.
rehash
und starte sie erneut - wenn es danach immer noch passiert, bearbeite das in.Antworten:
which -a cmd
sucht nach allen regulären Dateien mit dem Namen, fürcmd
die Sie Ausführungsberechtigung haben, in den Verzeichnissen in$path
(zusätzlich zu Aliasen, Funktionen, eingebauten ...).While
which cmd
gibt den Befehl zurück, der ausgeführt werdenzsh
würde (which
istzsh
wie in dentcsh
meisten anderen Shells eingebaut, aber nicht so).zsh
Wie die meisten anderen Shells speichert sie die Pfade der ausführbaren Dateien in einerhash
Tabelle, damit sie nicht bei$path
jedem Aufruf in allen Verzeichnissen nachgeschlagen werden müssen.Diese Hash-Tabelle (die im
$commands
assoziativen Array in verfügbar gemacht wirdzsh
) kann mit demhash
Befehl (Standard-POSIX-Shell-Befehl) bearbeitet werden.Wenn Sie den
brew
Befehl ausgeführt haben (oderwhich/type/whence brew
die Befehlsvervollständigung verwendet haben oder irgendetwas, das diesen Hash / Cache vorbereitet hätte), bevor er hinzugefügt wurde/usr/local/Cellar/zplug/HEAD-9fdb388/bin
oder bevor er/usr/local/Cellar/zplug/HEAD-9fdb388/bin
hinzugefügt wurde$path
,zsh
hätten Sie sich an seinen Pfad erinnert und ihn als gespeichert$commands[brew]=/usr/local/bin/brew
.In diesem Fall können Sie
hash -r
(wie in der Bourne-Shell) oderrehash
(wie in csh) die gespeicherten Befehlezsh
vergessen haben (diesen Cache ungültig machen ), damit er das nächste Mal nachschlagen und ihn am neuen Speicherort finden kann.quelle
$commands
ist nicht$command
. Siehe Bearbeiten./usr/local/bin/brew
ist in der Regel ein symbolischer Link.Also
/usr/local/bin/brew
und/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
sind wahrscheinlich die gleichen Dateien.
Art:
bestätigen.
quelle