ในบางระบบwhich -a
แสดงการแข่งขันทั้งหมด หากเปลือกของคุณเป็นทุบตีหรือzsh¹คุณสามารถใช้type
แทน: type foo
แสดงการจับคู่ครั้งแรกและtype -a foo
แสดงการแข่งขันทั้งหมด สามคำสั่งtype
, which
และwhence
ทำส่วนใหญ่เป็นสิ่งเดียวกัน; พวกเขาแตกต่างกันระหว่าง shells และระบบปฏิบัติการในสภาพพร้อมใช้งานตัวเลือกและสิ่งที่พวกเขารายงาน type
พร้อมใช้งานเสมอและแสดงชื่อเหมือนคำสั่งที่เป็นไปได้ทั้งหมด (นามแฝงคำหลักเชลล์ในตัวฟังก์ชันและคำสั่งภายนอก)
วิธีเดียวที่สามารถพกพาได้อย่างเต็มที่เพื่อแสดงการแข่งขันทั้งหมดคือการแยกวิเคราะห์$PATH
ตัวเอง นี่คือเชลล์สคริปต์ที่ทำสิ่งนี้ ถ้าคุณทำมันฟังก์ชั่นเปลือกให้แน่ใจว่าจะใส่ร่างกายของฟังก์ชั่นในวงเล็บ (เพื่อให้การเปลี่ยนแปลงIFS
และset -f
ไม่ได้หลบหนีฟังก์ชั่น) และการเปลี่ยนแปลงไปexit
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
¹
หรือ ksh 93 ตามเอกสารแม้ว่า ksh 93s + 2008-01-31 จะพิมพ์เฉพาะนัดแรกเมื่อฉันลอง
which --all
ในระบบของฉันมันเป็นสิ่งแรกที่แสดงบนหน้าคน: