zsh
è una delle poche shell (essendo le altre tcsh
( which
originate come uno csh
script per gli csh
utenti, che ha anche avuto i suoi limiti, tcsh
lo ha reso incorporato come un miglioramento)) dove which
fa qualcosa di sensato poiché è un built-in della shell, ma in qualche modo tu o il tuo sistema operativo (tramite alcuni rc
file) lo ha rotto sostituendolo con una chiamata al which
comando 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
, whence
e where
sono 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 whence
comando.
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 i
e 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 type
comando, e puoi usare command -v
solo per ottenere il percorso di un comando (sebbene entrambi type
e command -v
siano 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/bin
apparire due volte nel tuo $PATH
, potresti aggiungere un typeset -U path
al tuo ~/.zshrc
)