zshè una delle poche shell (essendo le altre tcsh( whichoriginate come uno cshscript per gli cshutenti, che ha anche avuto i suoi limiti, tcshlo ha reso incorporato come un miglioramento)) dove whichfa qualcosa di sensato poiché è un built-in della shell, ma in qualche modo tu o il tuo sistema operativo (tramite alcuni rcfile) lo ha rotto sostituendolo con una chiamata al whichcomando di sistema che non può fare nulla di sensato in modo affidabile poiché non ha accesso agli interni della shell, quindi non può sapere come quella shell interpreta un nome di comando .
In zsh, tutti which, type, whencee wheresono builtin comandi che sono tutti utilizzati per scoprire quali comandi sono, ma con diverse uscite. Sono tutti lì per motivi storici, puoi ottenere tutti i loro comportamenti con diversi flag al whencecomando.
Puoi ottenere i dettagli di ciò che fanno ciascuno eseguendo:
info -f zsh --index-search=which
Oppure digitare info zsh, quindi visualizzare l'indice con ie immettere il nome predefinito (il completamento è disponibile).
Ed evitare di usare /usr/bin/which. Non c'è guscio al giorno d'oggi in cui che which è necessario. Come dice Timothy, usa l'integrato fornito dalla tua shell. La maggior parte delle shell POSIX avrà il typecomando, e puoi usare command -vsolo per ottenere il percorso di un comando (sebbene entrambi typee command -vsiano opzionali in POSIX (ma non Unix, e non più in LSB), sono disponibili nella maggior parte se non in tutti Conchiglie tipo Bourne che probabilmente incontrerai mai).
(A proposito, sembra /usr/binapparire due volte nel tuo $PATH, potresti aggiungere un typeset -U pathal tuo ~/.zshrc)