El comando a usar varía de shell a shell.
Solo un shell integrado le dirá correctamente qué hará el shell para un nombre de comando dado, ya que solo los integrados pueden conocer completamente los alias, las funciones de shell, otros integrados, etc. Recuerde:no todos los comandos corresponden a archivos ejecutables en primer lugar.
-
Para el shell de Bourne Again,
bash, el incorporado es eltypecomando:$ type '[' [ is a shell builtin -
Para la concha de pescado,
fish, Eltypebuiltin funciona de manera similar a bash. Para obtener solo la ruta a un ejecutable, usecommand -v:$ type cat cat is /bin/cat $ command -v cat /bin/cat -
Para Korn Shell,
ksh, el incorporado es elwhencecomando — contypeconfigurado inicialmente como un alias ordinario parawhence -vy elcommandintegrado con el-vopción equivalente awhence:$ whence -v ls ls is a tracked alias for /bin/ls -
Para Z Shell,
zsh, el incorporado es elwhencecomando, con elcommandintegrado con el-vopción equivalente awhencey lostypeincorporados ,whichywhereequivalente awhencecon las opciones-v,-cy-carespectivamente.$ whence ls /bin/ls -
Para el T C Shell,
tcsh, el incorporado es elwhichcomando:no debe confundirse con ningún comando externo con ese nombre:> which ls ls: aliased to ls-F > which \ls /bin/ls
Lecturas adicionales
- https://unix.stackexchange.com/questions/85249/
Puedes usar which por esto:
[email protected]:~$ which ls
/bin/ls
Funciona buscando en el PATH para archivos ejecutables que coincidan con los nombres de los argumentos. Tenga en cuenta que no funciona con alias de 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 , sin embargo, funciona:
[email protected]:~$ type listdir
listdir is aliased to `/bin/ls'
which no (necesariamente) devolver el archivo ejecutable. Devuelve el primer archivo coincidente nombre encuentra en $PATH (o múltiples archivos con nombres similares cuando se usa which -a )... El real el ejecutable puede estar a varios enlaces de distancia.
which locate
/usr/bin/locate
`file $(which locate)
/usr/bin/locate: symbolic link to /etc/alternatives/locate'
El comando que encuentra el real ejecutable es readlink -e ,
(junto con which )
readlink -e $(which locate)
/usr/bin/mlocate
Para ver todos los enlaces intermedios :
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