Instalaciones múltiples y comprensión $ PATH


17

Tengo una versión anterior de Git instalada en:

/usr/bin/

Recientemente descargué una versión más nueva para:

/usr/local/bin

Cuando escribo:

which git

Obtengo la ubicación de la versión anterior. Creo que esto se debe a que / usr / bin / aparece antes de / usr / local / bin en mi variable $ PATH y, por lo tanto, la versión anterior de git se 'encuentra' primero.

Para probar esto, cambié el nombre de la versión anterior de git a "git_old". Ahora cuando escribo:

which git

Obtengo la ubicación de la versión más nueva, como se esperaba. Pero cuando escribo:

git --version

Obtuve el siguiente error:

-bash: /usr/bin/git: No such file or directory

Me pregunto por qué mi computadora vuelve a buscar Git en la ubicación anterior.

Respuestas:


30

Bash almacena en caché la ruta completa a los ejecutables para que no tenga que mirar $PATHtodo el tiempo.

Puedes ver lo que está en el caché usando el hashcomando:

deltik@node51 [~]$ hash
hits    command
   1    /usr/bin/git

Este caché se puede borrar con hash -r:

deltik@node51 [~]$ hash -r
deltik@node51 [~]$ hash
hash: hash table empty

Recursos adicionales


2
wtf nunca supe esto, increíble.
djsmiley2k en la oscuridad

1
La mayoría de los otros shells hacen lo mismo, pero no todos usan hash -rpara recargar el caché. Singer, como SSH, se usa rehashcomo comando en su lugar.
Moshe Katz

PATH = $ PATH debería borrar el caché. hash -r no es necesario.
jrw32982 apoya a Monica el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.