Кілька установок та розуміння $ 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?

Відповіді:


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

Додаткові ресурси


2
wtf Я ніколи цього не знав, дивовижно.
djsmiley2k у темряві

1
Більшість інших оболонок роблять те саме, але вони не всі використовують hash -rдля перезавантаження кешу. Співачка, наприклад SSH, використовується rehashзамість команди.
Моше Кац

PATH = $ PATH повинен очистити кеш. хеш -р не потрібен.
jrw32982 підтримує Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.