Il comando da usare varia da shell a shell.
Solo un built-in della shell dirà correttamente cosa farà la shell per un dato nome di comando, poiché solo i built-in possono conoscere completamente alias, funzioni della shell, altri built-in e così via. Ricorda:non tutti i comandi corrispondono a file eseguibili in primo luogo.
-
Per la shell Bourne Again,
bash
, l'integrato ètype
comando:$ type '[' [ is a shell builtin
-
Per il guscio di pesce,
fish
, Iltype
builtin funziona in modo simile a bash. Per ottenere solo il percorso di un eseguibile, usacommand -v
:$ type cat cat is /bin/cat $ command -v cat /bin/cat
-
Per il Korn Shell,
ksh
, l'integrato è ilwhence
comando — contype
inizialmente impostato come alias ordinario perwhence -v
e ilcommand
integrato con-v
opzione equivalente awhence
:$ whence -v ls ls is a tracked alias for /bin/ls
-
Per la shell Z,
zsh
, l'integrato èwhence
comando, con ilcommand
integrato con-v
opzione equivalente awhence
e il built-intype
,which
ewhere
equivalente awhence
con le opzioni-v
,-c
e-ca
rispettivamente.$ whence ls /bin/ls
-
Per la TC Shell,
tcsh
, l'integrato èwhich
command — da non confondere con nessun comando esterno con quel nome:> which ls ls: aliased to ls-F > which \ls /bin/ls
Ulteriori letture
- https://unix.stackexchange.com/questions/85249/
Puoi usare which
per questo:
[email protected]:~$ which ls
/bin/ls
Funziona cercando il PATH
per i file eseguibili corrispondenti ai nomi degli argomenti. Nota che non funziona con gli alias della shell:
[email protected]:~$ alias listdir=/bin/ls
[email protected]:~$ listdir /
bin dev initrd.img lib32 media proc selinux tmp vmlinuz
...
[email protected]:~$ which listdir
[email protected]:~$
type
, tuttavia, funziona:
[email protected]:~$ type listdir
listdir is aliased to `/bin/ls'
which
non (necessariamente) restituire il file eseguibile. Restituisce il primo file corrispondente nome trova nel $PATH (o in più file con nome simile quando si usa which -a
)... L'effettivo l'eseguibile può essere a 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 il file effettivo eseguibile è readlink -e
,
(insieme a which
)
readlink -e $(which locate)
/usr/bin/mlocate
Per vedere tutti i link 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