zshjest jedną z nielicznych powłok (pozostałe są tcsh( whichnapisane jako cshskrypt dla cshużytkowników, który również miał swoje ograniczenia, tcshuczyniło ją wbudowanym jako ulepszenie)), gdzie whichrobi coś sensownego, ponieważ jest to wbudowana powłoka, ale w jakiś sposób ty lub twój system operacyjny (przez jakiś rcplik) przerwał go, zastępując go wywołaniem whichpolecenia 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, whencei wheresą 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 whencepolecenia.
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ą ii 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 typepolecenie, a można użyć command -v, aby tylko dostać ścieżkę polecenia (choć oba typei command -vsą 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/binpojawia się dwa razy w twoim $PATH, możesz dodać a typeset -U pathdo swojego ~/.zshrc)