La respuesta rapida
Para saber qué copia bash
tratará de ejecutar, usa la utilidad incorporada del bash type
. Para saber qué copia de du
, por ejemplo, se ejecutará, ejecute:
$ type du
du is /usr/bin/du
La teoría
Cuando pidas bash
ejecutar algo bash
Realiza dos pasos:
En primer lugar, comprueba su caché para la ubicación del archivo. Esta es una lista de nombres de ejecutables y donde se ubicó el archivo la última vez que bash
ejecutado
En segundo lugar, si el archivo no está en la memoria caché, comprueba la ruta, buscando cada directorio en la ruta de izquierda a derecha.
Tenga en cuenta que la respuesta, entonces, depende de si ejecutó el ejecutable en el shell actual antes de hacer la copia. Si es así, bash
puede haber guardado su ubicación en el caché y lo hará ignorar cualquier ubicación nueva en la que pueda estar después de hacer copias. Si no está en el caché, entonces el archivo que se ejecuta depende solo del orden de los directorios en la ruta.
Más detalles
Para ver qué hay en el caché actual de bash, ejecute:
$ declare -p BASH_CMDS
declare -A BASH_CMDS='([du]="/usr/bin/du" )'
Lo anterior muestra que solo du
Estaba en el caché cuando ejecuté eso. Si ejecutara más comandos y luego lo ejecutara de nuevo, habría más en el caché.
Para ver cuál es la ruta actual, ejecute:
$ echo $PATH
/bin:/usr/bin:/opt/bin:/usr/local/bin:/usr/X11R6/bin
La ruta es una lista separada por dos puntos. Lo anterior muestra cinco directorios en la ruta. Se buscarán comenzando por la izquierda y trabajando hacia la derecha.
¿Puedo establecer una preferencia?
Sí, puede cambiar el orden de los directorios en la ruta.
Alternativamente, para el trabajo interactivo, puede establecer un alias. Por ejemplo:
$ alias dd=/opt/bin/dd
Después de establecer el alias anterior, puede escribir dd
en la línea de comando y bash
ignorará el caché e ignorará el PATH, y ejecutará (o intentará ejecutar) /opt/bin/dd
.