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.

usuario1551817
fuente

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

Deltik
fuente
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