zsh
é um dos poucos shells (os outros sendo tcsh
( which
originados como um csh
script para csh
usuários, que também tiveram sua limitação, tcsh
tornou-o um aprimoramento)) onde which
faz algo sensato, já que é um shell embutido, mas de alguma forma você ou seu sistema operacional (através de algum rc
arquivo) interrompeu-o substituindo-o por uma chamada para o which
comando do sistema, que não pode fazer nada de forma confiável, pois não tem acesso aos internos do shell, por isso não pode saber como esse shell interpreta um nome de comando .
Em zsh, todos which
, type
, whence
e where
são builtin comandos que são usados para obter informações sobre quais comandos estão, mas com diferentes saídas. Eles estão todos lá por motivos históricos, você pode obter todos os comportamentos deles com diferentes sinalizadores para o whence
comando.
Você pode obter os detalhes do que cada um faz executando:
info -f zsh --index-search=which
Ou digite info zsh
, abra o índice com i
e digite o nome interno (a conclusão está disponível).
E evite usar /usr/bin/which
. Hoje em dia não há shell onde isso which
é necessário. Como Timothy diz, use o built-in que seu shell fornece para isso. A maioria das conchas POSIX terá o type
comando, e você pode usar command -v
apenas para obter o caminho de um comando (embora ambos type
e command -v
são opcionais no POSIX (mas não Unix, e não mais em LSB), eles estão disponíveis na maioria, se não todo o Conchas tipo Bourne que você provavelmente encontrará).
(BTW, parece que /usr/bin
aparece duas vezes no seu $PATH
, você pode adicionar um typeset -U path
ao seu ~/.zshrc
)