zsh
jest jedną z nielicznych powłok (pozostałe są tcsh
( which
napisane jako csh
skrypt dla csh
użytkowników, który również miał swoje ograniczenia, tcsh
uczyniło ją wbudowanym jako ulepszenie)), gdzie which
robi coś sensownego, ponieważ jest to wbudowana powłoka, ale w jakiś sposób ty lub twój system operacyjny (przez jakiś rc
plik) przerwał go, zastępując go wywołaniem which
polecenia systemowego, które nie może zrobić nic sensownego, ponieważ nie ma dostępu do stażystów powłoki, więc nie może wiedzieć, jak powłoka interpretuje nazwę polecenia .
W zsh, wszystko which
, type
, whence
i where
są wbudowane poleceń, które są używane, aby dowiedzieć się o tym, co są polecenia, ale z różnych wyjść. Wszystkie są tam z powodów historycznych, możesz uzyskać wszystkie ich zachowania z różnymi flagami do whence
polecenia.
Możesz uzyskać szczegółowe informacje na temat każdego z nich, uruchamiając:
info -f zsh --index-search=which
Lub wpisz info zsh
, a następnie wyświetl indeks za pomocą i
i wprowadź nazwę wbudowaną (uzupełnianie jest dostępne).
I unikaj używania /usr/bin/which
. Nie ma w dzisiejszych czasach, gdzie skorupa , która which
jest potrzebna. Jak mówi Timothy, użyj wbudowanego interfejsu, który udostępnia do tego powłoka. Większość muszle POSIX będą mieli type
polecenie, a można użyć command -v
, aby tylko dostać ścieżkę polecenia (choć oba type
i command -v
są opcjonalne w POSIX (ale nie Unix, a nie dłużej w LSB), są one dostępne w większości, jeśli nie wszystkich Pociski podobne do Bourne'a, z którymi prawdopodobnie się spotkasz).
(BTW, wygląda na to, że /usr/bin
pojawia się dwa razy w twoim $PATH
, możesz dodać a typeset -U path
do swojego ~/.zshrc
)