Installations multiples et compréhension de $ PATH


17

J'ai une ancienne version de Git installée à:

/usr/bin/

J'ai récemment téléchargé une version plus récente pour:

/usr/local/bin

Quand je tape:

which git

J'obtiens l'emplacement de l'ancienne version. Je crois que c'est juste parce que / usr / bin / apparaît avant / usr / local / bin dans ma variable $ PATH et donc l'ancienne version de git est 'trouvée' en premier.

Pour tester cela, j'ai renommé l'ancienne version de git en "git_old". Maintenant, quand je tape:

which git

J'obtiens l'emplacement de la nouvelle version, comme prévu. Mais quand je tape:

git --version

J'obtiens l'erreur suivante:

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

Je me demande simplement pourquoi mon ordinateur recommence à chercher l'ancien emplacement pour Git?

Réponses:


30

Bash met en cache le chemin complet des exécutables afin qu'il n'ait pas à parcourir à $PATHchaque fois.

Vous pouvez voir ce qui se trouve dans le cache à l'aide de la hashcommande:

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

Ce cache peut être effacé avec hash -r:

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

Ressources supplémentaires


2
wtf je ne l'ai jamais su, génial.
djsmiley2k dans l'obscurité

1
La plupart des autres shells font la même chose, mais ils ne sont pas tous utilisés hash -rpour recharger le cache. Singer, tel que SSH, utilise rehashplutôt la commande.
Moshe Katz

PATH = $ PATH devrait effacer le cache. le hachage -r n'est pas nécessaire.
jrw32982 prend en charge Monica
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.