Mam dziwne zachowanie z zsh (5.4.2_1 zainstalowany z homebrew) na OSX, który nie używa pierwszego wystąpienia pliku wykonywalnego na ścieżce.
Oto scenariusz:
echo $PATH
zwroty:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
napar jest w obu
/usr/local/Cellar/zplug/HEAD-9fdb388/bin
i
usr/local/bin/brew
Jest to potwierdzane przez uruchomienie, który - napar, który zwraca:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
/usr/local/bin/brew
Ale kiedy uruchamiam, który napar wraca:
/usr/local/bin/brew
a napar/usr/local/bin/brew
raczej działa/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
Jak to się może stać, gdy napar jest wcześniej na ścieżce?
Pomoc doceniona.
rehash
i uruchom je ponownie - jeśli nadal tak się dzieje, edytuj to w.Odpowiedzi:
which -a cmd
szuka wszystkich zwykłych plików,cmd
których nazwy masz uprawnienia do wykonywania w katalogach w$path
(oprócz aliasów, funkcji, wbudowanych ...).Podczas gdy
which cmd
zwraca polecenie, którezsh
by się uruchomiło (which
jest wbudowanezsh
jak w,tcsh
ale w przeciwieństwie do większości innych powłok).zsh
, podobnie jak większość innych powłok, pamięta ścieżki plików wykonywalnych whash
tabeli, aby nie trzeba było ich przeglądać we wszystkich katalogach przy$path
każdym ich wywołaniu.Tą tabelą skrótów (widoczną w
$commands
tablicy asocjacyjnej wzsh
) można manipulować za pomocąhash
polecenia (standardowe polecenie powłoki POSIX).Jeśli uruchomiłeś
brew
polecenie (lubwhich/type/whence brew
używałeś polecenia uzupełniającego lub cokolwiek, co przygotowałoby ten skrót / pamięć podręczną) przed dodaniem go/usr/local/Cellar/zplug/HEAD-9fdb388/bin
lub/usr/local/Cellar/zplug/HEAD-9fdb388/bin
dodaniem do niego$path
,zsh
zapamiętałbyś jego ścieżkę i zapisał jako$commands[brew]=/usr/local/bin/brew
.W takim przypadku możesz użyć
hash -r
(jak w powłoce Bourne'a) lubrehash
(jak w csh), abyzsh
zapomnieć zapamiętane polecenia (unieważnić pamięć podręczną ), aby następnym razem mogła je wyszukać i znaleźć w nowej lokalizacji.źródło
$commands
nie jest$command
. Zobacz edycję./usr/local/bin/brew
jest zwykle dowiązaniem symbolicznym.Więc
/usr/local/bin/brew
i/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
to prawdopodobnie te same pliki.
rodzaj:
potwierdzać.
źródło