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 type
comando:
$ type '['
[ is a shell builtin
Para la concha de pescadofish
, The type
builtin 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 whence
comando - con type
creado inicialmente como un alias normal para whence -v
y el command
incorporado en la -v
opció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 whence
mando, con el command
built-in con la -v
opción equivalente a whence
y los muebles empotrados type
, which
y where
equivalente a whence
las opciones -v
, -c
y -ca
respectivamente.
$ whence ls
/bin/ls
Por la Concha de TC, tcsh
, el built-in es el which
comando - que no debe confundirse con cualquier comando externo con ese nombre:
> which ls
ls: aliased to ls-F
> which \ls
/bin/ls
type
tambié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 which
a sí mismo. Entonces, para los usuarios de zsh, en particular, anula las interrupciones incorporadas which
.
Puedes usar which
para esto:
aix@aix:~$ which ls
/bin/ls
Funciona buscando PATH
archivos 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'
which
no 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 .
which
no 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/locate
file $(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