Odpowiedzi:
Tylko wbudowana powłoka powie jednemu poprawnie, co zrobi powłoka dla danej nazwy polecenia, ponieważ tylko wbudowane mogą w pełni wiedzieć o aliasach, funkcjach powłoki, innych wbudowanych itd. Pamiętaj: przede wszystkim nie wszystkie polecenia odpowiadają plikom wykonywalnym.
Dla Bourne Again Shell, bash, wbudowany jest typepolecenie:
$ type '['
[ is a shell builtin
Dla ryb skorupach,fish The typewbudowane działa podobnie do bash. Aby uzyskać tylko ścieżkę do pliku wykonywalnego, użyj command -v:
$ type cat
cat is /bin/cat
$ command -v cat
/bin/cat
Dla powłoki Korn ksh, wbudowany jest whencekomenda - z typewstępnie skonfigurować jako zwykły alias whence -va commandwbudowany z -vekwiwalentu opcja whence:
$ whence -v ls
ls is a tracked alias for /bin/ls
Dla Z Shell zsh, wbudowany jest whencekomenda, z commandwbudowaną z -vekwiwalentu opcja whencea wbudowany ins type, whichi whererównoważna whencez opcjami -v, -ci -caodpowiednio.
$ whence ls
/bin/ls
Dla TC Shell tcsh, wbudowany jest whichpolecenie - nie mylić z dowolnego zewnętrznego polecenia o tej samej nazwie:
> which ls
ls: aliased to ls-F
> which \ls
/bin/ls
typejest również wbudowany w Zsh?
which-2.19-6.el6.x86_64) Umieszcza plik startowy /etc/profile.d/which2.sh. Jest to odczytywane przez powłoki inne niż csh, w tym zsh. Alias whichdo siebie. W szczególności dla użytkowników zsh zastępuje on wbudowane funkcje which.
Możesz użyć whichdo tego:
aix@aix:~$ which ls
/bin/ls
Działa poprzez wyszukiwanie PATHplików wykonywalnych pasujących do nazw argumentów. Zauważ, że nie działa z aliasami powłoki:
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:~$
typedziała jednak:
aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'
whichsamo w sobie niekoniecznie wystarcza. Zwraca tylko pierwszą znalezioną nazwę w $ PATH ... Ta nazwa może być dowiązaniem symbolicznym, a nie rzeczywistym plikiem wykonywalnym końca łańcucha .
whichczy nie (koniecznie) zwracają plik wykonywalny. Zwraca pierwszą pasującą nazwę pliku, którą znajdzie w zmiennej $ PATH (lub wiele podobnych nazwanych plików podczas używania which -a) ... Rzeczywisty plik wykonywalny może być oddalony o wiele linków.
which locate/usr/bin/locatefile $(which locate)/usr/bin/locate: symbolic link to /etc/alternatives/locate' Polecenie, które znajduje się rzeczywistą wykonywalnego readlink -e,
(w połączeniu z which)
readlink -e $(which locate)/usr/bin/mlocate Aby zobaczyć wszystkie linki pośrednie :
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
Możesz spróbować:
whereis ls
To daje mi:
ls: /bin/ls /usr/share/man/man1/ls.1.gz