का उपयोग करें type commandname
। यह सच है अगर commandname
कुछ भी निष्पादन योग्य है: उपनाम, फ़ंक्शन, अंतर्निहित या बाहरी कमांड (ऊपर देखा गया $PATH
)। वैकल्पिक रूप से, command commandname
जो commandname
एक अंतर्निहित या बाहरी कमांड (ऊपर देखा गया $PATH
) है, तो सही है।
exists () {
type "$1" >/dev/null 2>/dev/null
}
कुछ श वेरिएंट हैं (निश्चित रूप से प्री-पॉसिक्स; मुझे /bin/sh
OSF1 .3.x के तहत पता है और शुरुआती नेटबीएसडी संस्करणों और कुछ 20 वीं सदी के लिनक्स वितरण में पाए जाने वाले अल्मक्विस्ट शेल के कुछ संस्करण हैं) जहां type
हमेशा रिटर्न होता है या नहीं मौजूद। मुझे नहीं लगता कि इन सहस्राब्दी के साथ किसी भी सिस्टम को भेज दिया गया है। यदि आप कभी भी उनका सामना करते हैं, तो यहां एक फ़ंक्शन है जिसका उपयोग आप $PATH
मैन्युअल रूप से खोज करने के लिए कर सकते हैं :
exists () { (
IFS=:
for d in $PATH; do
if test -x "$d/$1"; then return 0; fi
done
return 1
) }
यह फ़ंक्शन आम तौर पर उपयोगी है यदि आप बिल्ट-इन और फ़ंक्शंस को बाहर करना चाहते हैं और नाम को देखना चाहते हैं $PATH
। अधिकांश गोले में इसके लिए एक अंतर्निहित है command -v
, हालांकि, यह POSIX के लिए एक अपेक्षाकृत हालिया जोड़ है (अभी भी POSIX के रूप में वैकल्पिक है: 2004)। यह मूल रूप से एक प्रोग्रामर-अनुकूल संस्करण है type
: यह एक निष्पादन योग्य के लिए पूर्ण पथ प्रिंट करता है $PATH
, एक अंतर्निहित या फ़ंक्शन के लिए नंगे नाम, और एक उपनाम के लिए एक अन्य परिभाषा।
exists_in_path () {
case $(command -v -- "$1") in
/*) return 0;;
alias\ *) return 1;; # alias
*) return 1;; # built-in or function
esac
}
Ksh, bash और zsh में भी type -p
केवल निष्पादक दिखना है $PATH
। ध्यान दें कि बैश में, वापसी की स्थिति type -p foo
0 है यदि foo
एक अंतर्निहित या फ़ंक्शन है; यदि आप एक निष्पादन योग्य के लिए परीक्षण करना चाहते हैं $PATH
, तो आपको यह जांचने की आवश्यकता है कि आउटपुट खाली नहीं है। type -p
POSIX में नहीं है; उदाहरण के लिए डेबियन की राख (जो /bin/sh
उबंटू पर है) में यह नहीं है।