zsh
є однією з небагатьох оболонок (інша історія tcsh
( which
створена як csh
сценарій для csh
користувачів, яка також мала обмеження, tcsh
зробила це вбудованим як покращення)), де which
робиться щось розумне, оскільки це вбудована оболонка, але якимось чином ви або ваша ОС (через якийсь rc
файл) зламав його, замінивши його викликом до системної which
команди, яка не може зробити щось надійне надійно, оскільки не має доступу до інтернів оболонки, тому не може знати, як ця оболонка інтерпретує ім'я команди .
У Zsh, все which
, type
, whence
і where
є вбудованими командами, які все використовуються , щоб дізнатися про те, що команди, але з різними виходами. Вони все там з історичної причини, ви можете передати whence
команду всі їх поведінки з різними прапорами .
Ви можете отримати детальну інформацію про те, що кожен робить, запустивши:
info -f zsh --index-search=which
Або введіть info zsh
, а потім підберіть індекс i
і введіть вбудовану назву (завершення доступне).
І уникайте використання /usr/bin/which
. Там немає оболонки в наш час , коли , що which
необхідно. Як каже Тимофій, використовуйте вбудований, який надає ваша оболонка для цього. Більшість оболонок POSIX матимуть type
команду, і ви можете використовувати command -v
лише для отримання шляху команди (хоча обидва type
і command -v
є додатковими в POSIX (але не Unix і не більше в LSB), вони доступні в більшості, якщо не у всіх Борнові снаряди, які ви, швидше за все, коли-небудь натрапите).
(BTW, схоже, /usr/bin
з’являється двічі у вашому $PATH
, ви можете додати typeset -U path
свій ~/.zshrc
)