कुछ सिस्टम पर, which -aसभी मैचों को दिखाता है। यदि आपका शेल बैश या zsh¹ है, तो आप typeइसके बजाय उपयोग कर सकते हैं : type fooपहला मैच type -a fooदिखाता है और सभी मैच दिखाता है। तीन आज्ञाएँ type, whichऔर whenceअधिकतर वही काम करते हैं; वे उपलब्धता और विकल्पों में गोले और ऑपरेटिंग सिस्टम के बीच भिन्न होते हैं, और वास्तव में वे क्या रिपोर्ट करते हैं। 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:।