कुछ सिस्टम पर, 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
:।