Respuestas:
Solo un shell incorporado le dirá a uno correctamente lo que hará el shell para un nombre de comando dado, ya que solo los incorporados pueden conocer completamente los alias, las funciones del shell, otros incorporados, etc. Recuerde: no todos los comandos corresponden a archivos ejecutables en primer lugar.
Para el shell Bourne Again bash, el incorporado es el typecomando:
$ type '['
[ is a shell builtin
Para la concha de pescadofish , The typebuiltin funciona de manera similar a bash. Para obtener solo la ruta a un ejecutable, use command -v:
$ type cat
cat is /bin/cat
$ command -v cat
/bin/cat
Para el shell Korn, ksh, el built-in es el whencecomando - con typecreado inicialmente como un alias normal para whence -vy el commandincorporado en la -vopción equivalente a whence:
$ whence -v ls
ls is a tracked alias for /bin/ls
Para el Shell Z, zsh, el built-in es el whencemando, con el commandbuilt-in con la -vopción equivalente a whencey los muebles empotrados type, whichy whereequivalente a whencelas opciones -v, -cy -carespectivamente.
$ whence ls
/bin/ls
Por la Concha de TC, tcsh, el built-in es el whichcomando - que no debe confundirse con cualquier comando externo con ese nombre:
> which ls
ls: aliased to ls-F
> which \ls
/bin/ls
typetambién está integrado en zsh?
which-2.19-6.el6.x86_64) Coloca un archivo de inicio /etc/profile.d/which2.sh. Esto se lee mediante shells que no son csh, incluido zsh. Se alias whicha sí mismo. Entonces, para los usuarios de zsh, en particular, anula las interrupciones incorporadas which.
Puedes usar whichpara esto:
aix@aix:~$ which ls
/bin/ls
Funciona buscando PATHarchivos ejecutables que coincidan con los nombres de los argumentos. Tenga en cuenta que no funciona con alias de 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, sin embargo, funciona:
aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'
whichno es necesariamente suficiente por sí solo. Solo devuelve el primer nombre encontrado en $ PATH ... Ese nombre puede ser un enlace simbólico, y no el ejecutable real de fin de cadena .
whichno no (necesariamente) devolver el archivo ejecutable. Devuelve el primer nombre de archivo coincidente que encuentra en $ PATH (o múltiples archivos con nombre similar cuando se usa which -a) ... El ejecutable real puede estar a varios enlaces de distancia.
which locate/usr/bin/locatefile $(which locate)/usr/bin/locate: symbolic link to /etc/alternatives/locate' El comando que encuentra el ejecutable real 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
Puedes probar:
whereis ls
Me da:
ls: /bin/ls /usr/share/man/man1/ls.1.gz