¿Hay un bash incorporado para 'cuál'?

16

He estado probando una instalación mínima de Fedora. Para verificar la ruta de intérpretes como python o node, normalmente uso which.

Noto whichque no está instalado por defecto. Podría agregar el paquete, pero me pregunto si hay un shell incorporado que se pueda usar para realizar esta tarea común.

Estoy usando bash 4.2.

mikemaccana
fuente
1
De alguna manera, una búsqueda del equivalente de Windows me trajo aquí; para futuros espectadores: "where" le dirá la ruta del archivo dado.
Pato de goma
1
Animo a cualquiera que se encuentre con esta Q que lea también esta Q&A de U&L. Cubre todo lo que siempre quisiste saber which. ¿Por qué no usar "which"? ¿Qué usar entonces?
slm

Respuestas:

26

Puede usar type, que es un Bash incorporado:

$ type -P which
which is /usr/bin/which

Para obtener documentación, consulte help [t]ype, que se refiere a la typesección en la bashpágina del manual.

( help typeimprime las páginas de ayuda para dos incorporaciones que comienzan con la cadena "tipo", una de las cuales es obsoleta y no tiene ninguna relación con esto).

l0b0
fuente
3
Me gusta type -aa mí mismo. ¿Por qué los corchetes [t]ype?
Glenn Jackman
type -aimprimirá todas las cosas a las que apunta el argumento, y no solo lo que se ejecutará al escribirlo.
l0b0
2
Animo a cualquiera que se encuentre con esta Q que lea también esta Q&A de U&L. Cubre todo lo que siempre quisiste saber which. ¿Por qué no usar "which"? ¿Qué usar entonces?
slm
Lo primero en la lista de type -aes siempre lo que se ejecutaría. Hago lo mismo que Glenn y siempre uso type -atambién.
slm
1
type -pno muestra la ruta si el comando es un alias. type -Psiempre muestra la ruta de comando correctamente. Yo creo que. debemos actualizar la respuesta aceptada como type -P@ l0b0
dirigeant
10

Puedes usar typeo command -v. La salida de typees legible por humanos; la salida de command -vpuede ser ejecutada por Bash.

Tenga en cuenta que en realidad son un poco diferentes. typey commandbusque el valor hash del comando. Es decir, si escribe cmd, type cmdo command -v cmdle dirá exactamente lo que va a ser ejecutado. También funcionan en alias, funciones de Bash y componentes incorporados de Bash (aunque type -plos ignorará y solo devolverán archivos verdaderos).

whichsolo hace una búsqueda en la RUTA. Esto es diferente porque:

  • Si hay un alias, función o incorporado con el mismo nombre, se llamará en su lugar.
  • Si un comando se agregó anteriormente en la RUTA desde que se realizó el último hash, será encontrado por which, pero al ejecutar ese comando se usará el valor hash (puede forzar la actualización del hash en Bash con hash -r).

Por lo general, la gente realmente quiere type, no which, al menos para uso interactivo, ya que lo usan para averiguar "¿de dónde viene este comando cuando lo ejecuto?" Solo debe usarlo whichsi realmente desea hacer una búsqueda de RUTA.

asmeurer
fuente
command -ves el equivalente de ksh whence.
Henk Langeveld
1
Por lo que tenemos where, whencey por supuesto también who, whyy when? ¿Por qué no hay what?
Hagen von Eitzen
echo 'main(){printf("what\n");}' | sudo cc -x c - -o /usr/local/bin/what
Ivan Vučica