После того, как я перемещаю исполняемый файл, который я недавно выполнил (или чаще, после того, как я удалю что-то откуда-то и установлю другую версию где-то еще), bash не может его найти, даже если он все еще находится в PATH.
Пример:
find
sudo mv /usr/bin/find /usr/local/bin
find
Результаты в:
bash: /usr/bin/find: No such file or directory
Это действительно раздражает, потому что со мной такое случалось десятки раз. Как я могу остановить это?
Чтобы устранить непосредственную проблему:
hash -r
Чтобы это не повторилось:
set +h
чтобы отключить хеширование (т.е. кеширование в памяти).
Это можно поместить в файл запуска bash, например /etc/bashrc
.
Обратной стороной этого решения является то, что оно немного замедляет работу, если у вас установлена медленная сетевая файловая система (-а) и в PATH.
На самом деле, на мой взгляд, это древняя ошибка bash, которую нужно было исправить много лет назад, и это просто обходной путь.
Это может произойти, если новая копия не является исполняемой, поэтому проверьте ее разрешения и убедитесь, что они верны.
Чтобы решить проблему навсегда, не отключая хеширование полностью, поместите это в свой bashrc:
shopt -s checkhash
См. Мой другой ответ, чтобы узнать, как решить ближайшую проблему.