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?

user1551817
la source

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

Deltik
la source
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