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 eltype
comando:$ type '[' [ is a shell builtin
-
Para la concha de pescado,
fish
, Eltype
builtin 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 elwhence
comando — contype
configurado inicialmente como un alias ordinario parawhence -v
y elcommand
integrado con el-v
opción equivalente awhence
:$ whence -v ls ls is a tracked alias for /bin/ls
-
Para Z Shell,
zsh
, el incorporado es elwhence
comando, con elcommand
integrado con el-v
opción equivalente awhence
y lostype
incorporados ,which
ywhere
equivalente awhence
con las opciones-v
,-c
y-ca
respectivamente.$ whence ls /bin/ls
-
Para el T C Shell,
tcsh
, el incorporado es elwhich
comando: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