Обратите внимание, что это не дубликат. Я прошу отключить кеш, а не очищать его. Если у вас есть кэш для очистки, то он, очевидно, не отключен.
В тех редких случаях, когда я замечаю, что bash хранит кэш вещей, которые он нашел на пути, это не потому, что это полезно, а потому, что это чертовски раздражает. Пример:
~ dc$ export PATH=$HOME/bin:$PATH
~ dc$ cat bin/which
#!/bin/bash
echo "my which"
~ dc$ which
my which
~ dc$ rm bin/which
~ dc$ which which
-bash: /Users/dc/bin/which: No such file or directory
В другой оболочке ...
~ dc$ which which
/usr/bin/which
Я уверен, что это кэширование имело смысл еще в старые добрые времена, когда диски были медленными, а память была дорогой и ограниченной, и поэтому вы не могли много кешировать - кэширование пути дешевле, чем кэширование всех дисковых блоков, необходимых для поиска команды , Но в наши дни это не дает заметной выгоды и вызывает больше проблем, чем решает. Это ошибка, граничащая с ошибкой.
И я даже не могу найти способ отключить его. Есть указатели?
/usr/bin
полностью остается в кеше.set +h
для отключения хеширования.Ответы:
Вы можете просто очистить хешированные исполняемые файлы до того, как появится приглашение:
От
help hash
:источник
set +h
set +h
не идеален, так как многие утилиты (например, установки ruby gem) вызываютhash
, генерируя потоки-bash: hash: hashing disabled
предупреждений.Вы можете заставить bash выполнить поиск нового пути, если команды в хеш-таблице больше не существует.
Из справочной страницы Bash:
Пример:
источник