Trên một số hệ thống, which -ahiể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 typethay thế: type foohiển thị trận đấu đầu tiên và type -a foohiển thị tất cả các trận đấu. Ba lệnh type, whichvà whencethự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. typeluô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 $PATHchí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 IFSvà set -fkhông thoát khỏi hàm) và thay đổi exitthà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.