मुझे PATH
शेल स्क्रिप्ट का उपयोग करके किसी दिए गए प्रोग्राम का मार्ग खोजने की आवश्यकता है । पथ कार्यक्रम का वास्तविक पूर्ण पथ होना चाहिए, जिसे बाद में किसी एक exec*
कार्य के लिए पारित किया जा सकता है , जो PATH
स्वयं की खोज नहीं करता है, जैसे execv
।
ऐसे कार्यक्रम हैं kill
, जो एक वास्तविक कार्यक्रम और एक ही समय में निर्मित शेल के रूप में उपलब्ध हैं। यदि यह मामला है, तो मुझे वास्तविक कार्यक्रम के लिए पूर्ण पथ की आवश्यकता है।
कई उपयोगिताओं हैं जो कि 2.9 2.9.1, कमांड खोज और पोसिक्स मानक के निष्पादनPATH
में निर्दिष्ट कार्यक्रम पर एक कार्यक्रम पा सकते हैं ।
वहाँ है which
, जो किसी भी मानक का हिस्सा नहीं है। यह कुछ प्रणालियों पर एक नियमित कार्यक्रम हो सकता है, जबकि कुछ गोले प्रदान करते हैं यह एक बिलिन है। यह अधिकांश प्रणालियों और गोले पर उपलब्ध लगता है, लेकिन एक अंतर्निहित संस्करण के साथ गोले भी निष्पादन योग्य के लिए पथ के बजाय बिल्ट-इन का नाम वापस करते हैं। इसके अलावा यह किसी भी तरह से मानकीकृत नहीं है और किसी भी आउटपुट को वापस कर सकता है और विभिन्न विकल्प ले सकता है।
bash# which kill
/usr/bin/kill
dash# which kill
/usr/bin/kill
fish# which kill
/usr/bin/kill
mksh# which kill
/usr/bin/kill
tcsh# which kill
kill: shell built-in command.
zsh# which kill
kill: shell built-in command
वहाँ है whence
, जो कुछ गोले का बिल्ट-इन है। लेकिन कई गोले पर उपलब्ध नहीं है। यह प्रोग्राम के पथ के बजाय बिल्ट-इन का नाम भी लौटाएगा। -p
इस व्यवहार को बदलने के लिए एक को पारित किया जा सकता है।
bash# whence kill
bash: whence: command not found
dash# whence kill
dash: 1: whence: not found
fish# whence kill
fish: Unknown command 'whence'
mksh# whence kill
kill
mksh# whence -p kill
/usr/bin/kill
tcsh# whence kill
whence: Command not found.
zsh# whence kill
kill
zsh# whence -p kill
/usr/bin/kill
वहाँ command
POSIX द्वारा निर्दिष्ट बिलिन है: 2008 । दुर्भाग्य से यह नियमित कमांड और बिल्ट-इन की भी खोज करता है और उसी नाम के बिल्ट-इन द्वारा छायांकित प्रोग्राम के पथ के बजाय बिल्ट-इन का नाम लौटाएगा। कुछ पुराने गोले इसे अभी तक लागू नहीं किए हैं।
bash# command -v kill
kill
dash# command -v kill
kill
fish# command -v kill
/usr/bin/kill
mksh# command -v kill
kill
tcsh# command -v kill
command: Command not found.
zsh# command -v kill
kill
realpath
enable
केवल द्वारा प्रदान किया गया है bash
औरzsh
type -p
। बैश और डैश दोनों आपको command
कमांड को वास्तविक निष्पादन योग्य चलाने के लिए कहते हैं, भले ही उसी नाम से कोई फ़ंक्शन या बिलिन हो।
command
कार्य (और उपनाम) को छोड़ देता है, लेकिन नहीं बनता है, जैसा कि Q सही कहता है। और आप हमेशा एक शेलबैंग का उपयोग नहीं कर सकते हैं क्योंकि कोई भी रास्ता नहीं है जो सभी सिस्टम पर किसी भी दिए गए शेल, या यहां तक कि कुछ पॉस्क शेल भी मिलता है।
enable
क्या POSIX में निर्दिष्ट है या नहीं, लेकिन यदि यह है, तो आपenable -n which
शेल के लिए निर्मित शेल को अक्षम करने के लिए उपयोग कर सकते हैंwhich
।