Risposte:
Solo un built-in della shell dirà correttamente cosa farà la shell per un determinato nome di comando, poiché solo i built-in possono conoscere appieno gli alias, le funzioni della shell, altri built-in e così via. Ricorda: non tutti i comandi corrispondono in primo luogo ai file eseguibili.
Per la Bourne Again shell, bash
, incorporato è il type
comando:
$ type '['
[ is a shell builtin
Per la conchiglia di pescefish
, The type
builtin funziona in modo simile a bash. Per ottenere solo il percorso di un eseguibile, utilizzare command -v
:
$ type cat
cat is /bin/cat
$ command -v cat
/bin/cat
Per la Korn Shell, ksh
, il built-in è il whence
comando - con type
creato inizialmente come alias ordinario whence -v
e il command
built-in con l' -v
opzione equivalente a whence
:
$ whence -v ls
ls is a tracked alias for /bin/ls
Per la Z shell, zsh
, il built-in è il whence
comando con il command
built-in con l' -v
opzione equivalente al whence
ei built-in type
, which
e where
pari a whence
con le opzioni -v
, -c
e -ca
, rispettivamente.
$ whence ls
/bin/ls
Per il TC Shell, tcsh
, il built-in è il which
comando di - da non confondere con qualsiasi comando esterno con quel nome:
> which ls
ls: aliased to ls-F
> which \ls
/bin/ls
type
è anche incorporato in zsh?
which-2.19-6.el6.x86_64
) Inserisce un file di avvio /etc/profile.d/which2.sh
. Questo viene letto da shell non csh, incluso zsh. Alias which
a se stesso. Quindi, in particolare per gli utenti zsh, sostituisce il comando incorporato which
.
Puoi usare which
per questo:
aix@aix:~$ which ls
/bin/ls
Funziona cercando i PATH
file eseguibili corrispondenti ai nomi degli argomenti. Si noti che non funziona con gli alias di shell:
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
, tuttavia, funziona:
aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'
which
non è necessariamente sufficiente da solo. Restituisce solo il primo nome trovato in $ PATH ... Quel nome può essere un collegamento simbolico e non l' eseguibile di fine catena .
which
non non (necessariamente) restituire il file eseguibile. Restituisce il primo nome di file corrispondente che trova nel $ PATH (o più file simili come quando si utilizza which -a
) ... L' eseguibile effettivo potrebbe essere più collegamenti di distanza.
which locate
/usr/bin/locate
file $(which locate)
/usr/bin/locate: symbolic link to /etc/alternatives/locate'
Il comando che trova l' eseguibile effettivo è readlink -e
,
(insieme a which
)
readlink -e $(which locate)
/usr/bin/mlocate
Per vedere tutti i collegamenti intermedi :
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
Puoi provare:
whereis ls
Mi dà:
ls: /bin/ls /usr/share/man/man1/ls.1.gz