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 type
komut:
$ type '['
[ is a shell builtin
Balık kabuğu içinfish
, type
yerleş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 whence
komut - ile type
başlangıçta için sıradan bir takma ad olarak ayarlamaya whence -v
ve command
dahili ile -v
seç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 whence
ile, komut command
ile dahili -v
seçeneği eşdeğer whence
ve yerleşik ins type
, which
ve where
eşdeğer whence
seçenekleri ile -v
, -c
ve -ca
sırasıyla.
$ whence ls
/bin/ls
TC Shell için tcsh
, yerleşik olan which
komut - bu isimde herhangi bir dış komut ile karıştırılmamalıdır:
> which ls
ls: aliased to ls-F
> which \ls
/bin/ls
type
ayrı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 which
oluş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
PATH
Bağı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:~$
type
ancak, şu şekilde çalışır:
aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'
which
tek 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.
which
etmez 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/locate
file $(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