जवाबों:
केवल एक शेल बिल्ट-इन एक सही ढंग से बताएगा कि शेल किसी दिए गए कमांड नाम के लिए क्या करेगा, क्योंकि केवल बिल्ट-इन पूरी तरह से उपनाम, शेल फ़ंक्शन, अन्य निर्मित-इन और आगे के बारे में जान सकता है। याद रखें: पहली बार में सभी कमांड निष्पादन योग्य फ़ाइलों के अनुरूप नहीं हैं।
बॉर्न फिर खोल के लिए, bash, बिल्ट-इन है typeआदेश:
$ type '['
[ is a shell builtin
मछली के खोल के लिएfish , द typeबिलिन इसी तरह से काम करता है। एक निष्पादन योग्य के लिए सिर्फ रास्ता पाने के लिए, उपयोग करें command -v:
$ type cat
cat is /bin/cat
$ command -v cat
/bin/cat
कॉर्न शैल के लिए, ksh, बिल्ट-इन है whenceआदेश - साथ typeशुरू में के लिए एक साधारण उपनाम के रूप में की स्थापना की whence -vऔर commandबिल्ट-इन के साथ -vकरने के लिए विकल्प के बराबर whence:
$ whence -v ls
ls is a tracked alias for /bin/ls
जेड शैल के लिए, zsh, बिल्ट-इन है whenceआदेश, साथ commandमें निर्मित के साथ -vकरने के लिए विकल्प बराबर whenceऔर निर्मित-इन type, whichऔर whereके बराबर whenceविकल्पों के साथ -v, -c, और -caक्रमशः।
$ whence ls
/bin/ls
टीसी शेल के लिए tcsh, बिल्ट-इन है whichआदेश - उस नाम से किसी भी बाहरी कमांड के साथ भ्रमित होने की नहीं:
> which ls
ls: aliased to ls-F
> which \ls
/bin/ls
typeभी zsh करने के लिए बनाया गया है?
which-2.19-6.el6.x86_64) एक स्टार्टअप फ़ाइल में डालता है /etc/profile.d/which2.sh। यह गैर-शेश गोले द्वारा पढ़ा जाता है, जिसमें zsh भी शामिल है। यह whichखुद पर निर्भर करता है। तो zsh उपयोगकर्ताओं के लिए विशेष रूप से यह ओवरराइड करता है बिलिन को तोड़ता है which।
आप इसके लिए उपयोग कर सकते हैं which:
aix@aix:~$ which ls
/bin/ls
यह PATHतर्कों के नाम से मेल खाती निष्पादन योग्य फ़ाइलों की खोज करके काम करता है । ध्यान दें कि शेल उपनामों के साथ काम नहीं करता है:
aix@aix:~$ alias listdir=/bin/ls
aix@aix:~$ listdir /
bin dev initrd.img lib32 media proc selinux tmp vmlinuz
...
aix@aix:~$ which listdir
aix@aix:~$
typeहालांकि, काम करता है:
aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'
whichजरूरी नहीं कि यह अपने आप में पर्याप्त हो। यह केवल $ PATH में पहला पाया गया नाम देता है ... यह नाम प्रतीकात्मक लिंक हो सकता है, न कि वास्तविक अंतिम-श्रृंखला निष्पादन योग्य।
which(आवश्यक) निष्पादन योग्य फ़ाइल वापस नहीं करता है । यह पहली मिलान फ़ाइल का नाम देता है जो $ PATH में मिलती है (या उपयोग करते समय कई नामी फ़ाइलों की तरह which -a) ... वास्तविक निष्पादन योग्य कई लिंक दूर हो सकता है।
which locate/usr/bin/locatefile $(which locate)/usr/bin/locate: symbolic link to /etc/alternatives/locate' जो कमांड वास्तविक निष्पादन योग्य है readlink -e, वह है
(साथ में which)
readlink -e $(which locate)/usr/bin/mlocate सभी मध्यवर्ती लिंक देखने के लिए :
f="$(which locate)" # find name in $PATH
printf "# %s\n" "$f"
while f="$(readlink "$f")" ;do # follow links to executable
printf "# %s\n" "$f"
done
# /usr/bin/locate
# /etc/alternatives/locate
# /usr/bin/mlocate
तुम कोशिश कर सकते हो:
whereis ls
यह मुझे देता है:
ls: /bin/ls /usr/share/man/man1/ls.1.gz