Yanıtlar:
Yalnızca yerleşik bir kabuk, belirli bir komut adı için kabuğun ne yapacağını doğru bir şekilde söyleyecektir, çünkü yalnızca yerleşik adlar diğer adlar, kabuk işlevleri, diğer yerleşik öğeler vb. Hakkında tam olarak bilgi sahibi olabilir. Unutmayın: İlk olarak tüm komutlar yürütülebilir dosyalara karşılık gelmez.
Bourne Yine kabuk için bash, yerleşik olan typekomut:
$ type '['
[ is a shell builtin
Balık kabuğu içinfish , typeyerleşik bash benzer şekilde çalışır. Yalnızca yürütülebilir dosyanın yolunu bulmak için şunu kullanın command -v:
$ type cat
cat is /bin/cat
$ command -v cat
/bin/cat
Korn Shell için ksh, yerleşik olan whencekomut - ile typebaşlangıçta için sıradan bir takma ad olarak ayarlamaya whence -vve commanddahili ile -vseçeneği eşdeğeri whence:
$ whence -v ls
ls is a tracked alias for /bin/ls
Z Shell için zsh, yerleşik olduğu whenceile, komut commandile dahili -vseçeneği eşdeğer whenceve yerleşik ins type, whichve whereeşdeğer whenceseçenekleri ile -v, -cve -casırasıyla.
$ whence ls
/bin/ls
TC Shell için tcsh, yerleşik olan whichkomut - bu isimde herhangi bir dış komut ile karıştırılmamalıdır:
> which ls
ls: aliased to ls-F
> which \ls
/bin/ls
typeayrıca zsh için yerleşiktir?
which-2.19-6.el6.x86_64) Bir başlangıç dosyası koyduğu RHEL6's /etc/profile.d/which2.sh. Bu, zsh dahil olmak üzere csh dışı kabuklar tarafından okunur. Kendisi için takma ad whicholuşturuyor. Bu nedenle, özellikle zsh kullanıcıları için yerleşik olanları kırıyor which.
Bunun için kullanabilirsiniz which:
aix@aix:~$ which ls
/bin/ls
PATHBağımsız değişkenlerin adlarıyla eşleşen yürütülebilir dosyaları arayarak çalışır . Bunun kabuk takma adları ile çalışmadığını unutmayın:
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:~$
typeancak, şu şekilde çalışır:
aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'
whichtek başına yeterli değildir. Sadece döner ilk FOUND adını Yani ... $ PATH içinde adı sembolik bağlantı ve olabilir değil gerçek -sonu zinciri çalıştırılabilir.
whichetmez değildir (zorunlu olarak) yürütülebilir dosya döndürür. $ PATH içinde bulduğu ilk eşleşen dosya adını (veya kullanırken adlandırılmış birden çok dosya gibi which -a) döndürür ... Gerçek yürütülebilir dosya birden çok bağlantı uzakta olabilir.
which locate/usr/bin/locatefile $(which locate)/usr/bin/locate: symbolic link to /etc/alternatives/locate' Gerçek yürütülebilir dosyayı bulan komut readlink -e,
(ile bağlantılı olarak which)
readlink -e $(which locate)/usr/bin/mlocate Tüm ara bağlantıları görmek için :
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
Deneyebilirsin:
whereis ls
Bana verir:
ls: /bin/ls /usr/share/man/man1/ls.1.gz