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 typecomando:
$ type '['
[ is a shell builtin
Per la conchiglia di pescefish , The typebuiltin 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 whencecomando - con typecreato inizialmente come alias ordinario whence -ve il commandbuilt-in con l' -vopzione equivalente a whence:
$ whence -v ls
ls is a tracked alias for /bin/ls
Per la Z shell, zsh, il built-in è il whencecomando con il commandbuilt-in con l' -vopzione equivalente al whenceei built-in type, whiche wherepari a whencecon le opzioni -v, -ce -ca, rispettivamente.
$ whence ls
/bin/ls
Per il TC Shell, tcsh, il built-in è il whichcomando 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 whicha se stesso. Quindi, in particolare per gli utenti zsh, sostituisce il comando incorporato which.
Puoi usare whichper questo:
aix@aix:~$ which ls
/bin/ls
Funziona cercando i PATHfile 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'
whichnon è 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 .
whichnon 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/locatefile $(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