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 ètypecomando:$ type '[' [ is a shell builtin -
Per il guscio di pesce,
fish, Iltypebuiltin 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 è ilwhencecomando — contypeinizialmente impostato come alias ordinario perwhence -ve ilcommandintegrato con-vopzione equivalente awhence:$ whence -v ls ls is a tracked alias for /bin/ls -
Per la shell Z,
zsh, l'integrato èwhencecomando, con ilcommandintegrato con-vopzione equivalente awhencee il built-intype,whichewhereequivalente awhencecon le opzioni-v,-ce-carispettivamente.$ whence ls /bin/ls -
Per la TC Shell,
tcsh, l'integrato èwhichcommand — 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