Preferencia de RUTA en bashrc

Preferencia de RUTA en bashrc

Me preguntaba qué sucede en la siguiente situación. Supongamos que tengo un archivo ejecutable en un directorio que está en PATH en .bashrc. Si copio el archivo en otro directorio que también está configurado en PATH y ejecuto desde la terminal ese archivo, ¿qué copia estoy ejecutando?

¿Puedo establecer una preferencia para que diga "si un archivo existe en más de un lugar dentro de PATH, ejecutarlo en primer lugar en lugar de ejecutarlo en segundo lugar?".

Respuesta1

La respuesta rápida

Para saber qué copia bashintentará ejecutarse, utilice la utilidad incorporada de bash type. Para saber qué copia de du, por ejemplo, se ejecutará, ejecute:

$ type du
du is /usr/bin/du

La teoría

Cuando pides bashejecutar algo, bashrealiza dos pasos:

Primero, verifica en su caché la ubicación del archivo. Esta es una lista de nombres de ejecutables y dónde se encontraba el archivo la última vez que bashlo ejecutó.

En segundo lugar, si el archivo no está en el caché, verifica 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 realizar la copia. Si es así, bashes posible que haya guardado su ubicación en el caché y lo hará.ignorarcualquier ubicación nueva en la que pueda estar después de hacer copias. Si no está en la memoria caché, el archivo que se ejecuta depende únicamente 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 duestaba en el caché cuando lo ejecuté. Si ejecutara más comandos y luego los ejecutara nuevamente, 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 desde la izquierda y avanzando hacia la derecha.

¿Puedo establecer una preferencia?

Sí, puedes cambiar el orden de los directorios en la ruta.

Alternativamente, para trabajo interactivo, puede establecer un alias. Por ejemplo:

$ alias dd=/opt/bin/dd

Una vez configurado el alias anterior, puede escribir dden la línea de comando e bashignorará el caché e ignorará la RUTA, y ejecutará (o intentará ejecutar) /opt/bin/dd.

información relacionada