zsh
é um dos poucos shells (os outros são tcsh
( which
originados como csh
script para csh
users, que também tinha sua limitação, tcsh
fez com que ele fosse construído como uma melhoria)) onde which
faz algo sensato já que é um shell embutido, mas de alguma forma você ou seu sistema operacional (através de algum arquivo rc
) o quebrou substituindo-o por uma chamada ao comando which
do sistema que pode ' Não faça qualquer coisa sensata de forma confiável, uma vez que não tem acesso aos internos do shell, portanto, não pode saber como esse shell interpreta um nome de comando.
No zsh, todos os which
, type
, whence
e where
são comandos incorporados que são usados para descobrir quais são os comandos, mas com saídas diferentes. Eles estão todos lá por razões históricas, você pode obter todos os seus comportamentos com bandeiras diferentes para o comando whence
.
Você pode obter os detalhes do que cada um faz executando:
info -f zsh --index-search=which
Ou digite info zsh
, depois exiba o índice com i
e insira o nome incorporado (a conclusão está disponível).
E evite usar /usr/bin/which
. Não há shell hoje em dia em que é necessário which
. Como Timothy diz, use o builtin que seu shell fornece para isso. A maioria dos shells POSIX terá o comando type
, e você pode usar command -v
para obter apenas o caminho de um comando (embora type
e command -v
sejam opcionais no POSIX (mas não no Unix, e não mais em LSB), eles estão disponíveis na maioria, se não em todos os shells parecidos com 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
)