Trên một số hệ thống, which -a
hiển thị tất cả các trận đấu. Nếu shell của bạn là bash hoặc zsh¹, bạn có thể sử dụng type
thay thế: type foo
hiển thị trận đấu đầu tiên và type -a foo
hiển thị tất cả các trận đấu. Ba lệnh type
, which
và whence
thực hiện hầu hết cùng một điều; chúng khác nhau giữa hệ vỏ và hệ điều hành về tính khả dụng, tùy chọn và chính xác những gì chúng báo cáo. type
luôn có sẵn và hiển thị tất cả các tên giống như lệnh có thể (bí danh, từ khóa, hàm dựng sẵn, hàm và lệnh bên ngoài).
Cách duy nhất hoàn toàn di động để hiển thị tất cả các trận đấu là phân tích $PATH
chính mình. Đây là một kịch bản shell thực hiện điều này. Nếu bạn biến nó thành hàm shell, hãy đảm bảo đặt thân hàm trong ngoặc đơn (để thay đổi IFS
và set -f
không thoát khỏi hàm) và thay đổi exit
thành return
.
#!/bin/sh
set -f # disable globbing
IFS=: # break words at : only
not_found=1
for d in $PATH; do
if [ -f "$d/$x" ] && [ -x "$d/$x" ]; then
printf '%s\n' "$d/$x"
not_found=0
fi
done
exit $not_found
¹
Hoặc ksh 93, theo tài liệu, mặc dù ksh 93s + 2008-01-31 chỉ in trận đấu đầu tiên khi tôi thử.
which --all
.