Wiele instalacji i opis $ PATH

17

Mam starszą wersję Git zainstalowaną na:

/usr/bin/

Niedawno pobrałem nowszą wersję do:

/usr/local/bin

Kiedy piszę:

which git

Otrzymuję lokalizację starej wersji. Uważam, że dzieje się tak dlatego, że / usr / bin / pojawia się przed / usr / local / bin w mojej zmiennej $ PATH, więc starsza wersja git jest „najpierw” znaleziona.

Aby to przetestować, zmieniłem nazwę starszej wersji git na „git_old”. Teraz kiedy piszę:

which git

Otrzymuję lokalizację nowszej wersji, zgodnie z oczekiwaniami. Ale kiedy piszę:

git --version

Otrzymuję następujący błąd:

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

Zastanawiam się tylko, dlaczego mój komputer wraca do szukania Git w starej lokalizacji?

użytkownik1551817
źródło

Odpowiedzi:

30

Bash buforuje pełną ścieżkę do plików wykonywalnych, aby nie musiała za $PATHkażdym razem przeglądać.

Możesz zobaczyć, co jest w pamięci podręcznej, używając hashpolecenia:

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

Pamięć podręczną można wyczyścić za pomocą hash -r:

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

Dodatkowe zasoby

Deltik
źródło
2
wtf Nigdy tego nie wiedziałem, super.
djsmiley2k w ciemności
1
Większość innych powłok robi to samo, ale nie wszystkie używają hash -rdo przeładowania pamięci podręcznej. Zamiast tego użyj rehashpolecenia Singer, takiego jak SSH .
Moshe Katz
ŚCIEŻKA = $ ŚCIEŻKA powinna wyczyścić pamięć podręczną. hash -r nie jest potrzebny.
jrw32982 obsługuje Monikę