जवाबों:
केवल एक शेल बिल्ट-इन एक सही ढंग से बताएगा कि शेल किसी दिए गए कमांड नाम के लिए क्या करेगा, क्योंकि केवल बिल्ट-इन पूरी तरह से उपनाम, शेल फ़ंक्शन, अन्य निर्मित-इन और आगे के बारे में जान सकता है। याद रखें: पहली बार में सभी कमांड निष्पादन योग्य फ़ाइलों के अनुरूप नहीं हैं।
बॉर्न फिर खोल के लिए, 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/locate
file $(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