hash: почему Bash иногда запускает “не ту” командуКаждый раз искать исполняемый файл в каталогах из
$PATH было бы дорого. Поэтому Bash запоминает найденные пути в собственном кэше команд.Из-за этого после обновления или перемещения бинарника можно столкнуться с неожиданным поведением.
▪️Посмотреть кэш команд
hash
Пример вывода:
hits command
12 /usr/bin/git
5 /usr/bin/python3
8 /usr/bin/ssh
Здесь видно, какие команды Bash уже нашёл и закэшировал.
▪️Как работает кэш
Допустим, Bash уже знает:
/usr/bin/python3
Но затем появился другой бинарник раньше в
$PATH:/usr/local/bin/python3
Shell может продолжить использовать старый путь, пока кэш не будет обновлён.
▪️Очистить кэш
Полностью:
hash -r
После этого Bash снова выполнит поиск команды по
$PATH.Очистить только одну запись:
hash -d python3
При следующем запуске путь будет найден заново.
▪️Проверить, что реально запустится
type -a python3
или
which -a python3
Это покажет все найденные бинарники, но именно Bash может использовать уже закэшированный путь.
▪️Когда это бывает полезно
Частые ситуации:
• установка новой версии программы в
/usr/local/bin;• изменение
$PATH внутри скрипта;• переключение между несколькими версиями Python, Java или Node.js;
• обновление исполняемых файлов без открытия нового терминала.
▪️Почему это важно
Если после изменения
$PATH или установки новой версии команда продолжает запускать старый бинарник, проблема может быть не в переменной окружения, а в кэше Bash.Одна команда
hash -r часто решает проблему быстрее, чем долгий поиск ошибок в конфигурации.BashTex 📱 #bash #linux