Несколько установок и понимание $ PATH

17

У меня установлена ​​более старая версия Git по адресу:

/usr/bin/

Я недавно скачал более новую версию для:

/usr/local/bin

Когда я печатаю:

which git

Я получаю местоположение старой версии. Я полагаю, что это просто потому, что / usr / bin / появляется перед / usr / local / bin в моей переменной $ PATH, и поэтому сначала найдена более старая версия git.

Чтобы проверить это, я переименовал старую версию git в «git_old». Теперь, когда я печатаю:

which git

Я получаю местоположение более новой версии, как и ожидалось. Но когда я печатаю:

git --version

Я получаю следующую ошибку:

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

Мне просто интересно, почему мой компьютер возвращается к поиску старого места для Git?

user1551817
источник

Ответы:

30

Bash кэширует полный путь к исполняемым файлам, чтобы не приходилось $PATHкаждый раз просматривать его .

Вы можете увидеть, что находится в кеше, используя hashкоманду:

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

Этот кеш можно очистить с помощью hash -r:

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

Дополнительные ресурсы

Deltik
источник
2
Я никогда этого не знал, офигенно.
djsmiley2k в темноте
1
Большинство других оболочек делают то же самое, но не все они используют hash -rдля перезагрузки кэша. Singer, такой как SSH, rehashвместо этого используют в качестве команды.
Моше Кац
PATH = $ PATH должен очистить кеш. хеш -r не нужен.
jrw32982 поддерживает Монику