zshlà một trong số ít shell (những cái khác tcsh( whichcó nguồn gốc là cshtập lệnh cho cshngười dùng, cũng có giới hạn của nó, tcshlàm cho nó trở thành một bản dựng), trong đó whichcó 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ố rctệp) đã phá vỡ nó bằng cách thay thế nó bằng một lệnh gọi đến whichlệ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, whencevà wherelà 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 whencelệ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 ivà 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ó typelệ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 typevà 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/binxuất hiện hai lần trong của bạn $PATH, bạn có thể thêm một typeset -U pathvào ~/.zshrc)