TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #607 519
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
  • 👍 6
More from @bash_tex
  1. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  2. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  3. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  4. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  5. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  6. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →