zsh
es uno de los pocos shells (los otros están tcsh
( which
originados como un csh
script para csh
usuarios, que también tenían su limitación, lo tcsh
convirtieron en una mejora)) donde which
hace algo sensato ya que es un shell incorporado, pero de alguna manera usted o su sistema operativo (a través de algún rc
archivo) lo rompió al reemplazarlo con una llamada al which
comando del sistema que no puede hacer nada razonablemente confiable ya que no tiene acceso a los internos del shell, por lo que no puedo saber cómo ese shell interpreta el nombre de un comando .
En zsh, todos which
, type
, whence
y where
son incorporado comandos que se usan para obtener información sobre lo que son los comandos, pero con diferentes salidas. Todos están allí por razones históricas, puede obtener todos sus comportamientos con diferentes indicadores para el whence
comando.
Puede obtener los detalles de lo que cada uno hace al ejecutar:
info -f zsh --index-search=which
O escriba info zsh
, luego abra el índice con i
e ingrese el nombre incorporado (la finalización está disponible).
Y evite usar /usr/bin/which
. No hay hoy en día en la cáscara que which
se necesita. Como dice Timothy, use la solución incorporada que su caparazón proporciona para eso. La mayoría de los shells POSIX tendrán el type
comando, y puede usarlo command -v
para obtener solo la ruta de un comando (aunque ambos type
y command -v
son opcionales en POSIX (pero no Unix, y ya no en LSB), están disponibles en la mayoría, si no en todos Conchas tipo Bourne con las que probablemente te encuentres).
(Por cierto, parece que /usr/bin
aparece dos veces en su $PATH
, podría agregar un typeset -U path
a su ~/.zshrc
)