zsh
là một trong số ít shell (những cái khác tcsh
( which
có nguồn gốc là csh
tập lệnh cho csh
người dùng, cũng có giới hạn của nó, tcsh
làm cho nó trở thành một bản dựng), trong đó which
có một cái gì đó hợp lý vì nó được tích hợp sẵn, nhưng bằng cách nào đó bạn hoặc hệ điều hành của bạn (thông qua một số rc
tệp) đã phá vỡ nó bằng cách thay thế nó bằng một lệnh gọi đến which
lệnh hệ thống , điều này không thể làm bất cứ điều gì hợp lý vì nó không có quyền truy cập vào thực tập của shell nên không thể biết cách shell đó diễn giải tên lệnh .
Trong zsh, tất cả which
, type
, whence
và where
là BUILTIN lệnh rằng tất cả đều được sử dụng để tìm hiểu về những gì các lệnh, nhưng với kết quả đầu ra khác nhau. Tất cả đều ở đó vì lý do lịch sử, bạn có thể nhận được tất cả các hành vi của họ với các cờ khác nhau cho whence
lệnh.
Bạn có thể nhận được các chi tiết về những gì từng làm bằng cách chạy:
info -f zsh --index-search=which
Hoặc nhập info zsh
, sau đó hiển thị chỉ mục i
và nhập tên dựng sẵn (hoàn thành có sẵn).
Và tránh sử dụng /usr/bin/which
. Không có vỏ ngày nay nơi đó which
là cần thiết. Như Timothy nói, hãy sử dụng nội dung mà vỏ của bạn cung cấp cho điều đó. Hầu hết các shell POSIX sẽ có type
lệnh và bạn có thể sử dụng command -v
để chỉ nhận đường dẫn của lệnh (mặc dù cả hai type
và command -v
đều là tùy chọn trong POSIX (nhưng không phải là Unix và không còn trong LSB nữa), chúng có sẵn trong hầu hết các Vỏ sò giống như Bourne bạn có thể gặp phải).
(BTW, có vẻ như /usr/bin
xuất hiện hai lần trong của bạn $PATH
, bạn có thể thêm một typeset -U path
vào ~/.zshrc
)