Назад | Перейти на главную страницу

Bash не может найти файл после того, как я его переместил

После того, как я перемещаю исполняемый файл, который я недавно выполнил (или чаще, после того, как я удалю что-то откуда-то и установлю другую версию где-то еще), 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

См. Мой другой ответ, чтобы узнать, как решить ближайшую проблему.