На этот вопрос уже есть ответ:
Недавно я скомпилировал и установил diffutils-3.3, так как мне нужен переключатель - no-dereference
, который недоступен во включенной версии diff. После configure
, make
, make check
, make clean
и install
новая версия 3.3 diff была установлен в / usr / local / bin
.
Выполнение diff --version
привело к тому же 3.2, что и перед установкой.
команды и их выходные данные:
$ which diff
/usr/local/bin/diff
$ whereis -b diff
diff: /usr/bin/diff /usr/bin/X11/diff /usr/local/bin/diff
$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Используя полные пути, я могу подтвердить, что версия diff 3.3 находится в / usr / local / bin
, а версия 3.2 находится в / usr / bin
.
Глядя на путь, я ожидал, что, поскольку / usr / local / bin
появляется первым, этот конкретный diff
должен выполняться, когда я вызываю diff
без пути. Ясно, что это не так. У меня вопрос: почему и что я могу сделать, чтобы получить желаемый результат?
Примечание: Ubuntu 12.04.5
$ uname -a
Linux me-AOD270 3.2.0-80-generic #116-Ubuntu SMP Mon Mar 23 17:11:32 UTC 2015 i686 i686 i386 GNU/Linux
Первопричина этой проблемы кэшировалась (хешированные) записи в таблице поиска удара. bash
хеши управляют, чтобы пути избежали дорогих поисков.
Моя благодарность @muru для указания на меня в правильном направлении. Что я сделал, чтобы разрешить, что проблема состояла в том, чтобы использовать команду export $PATH$
, которая работала на меня.
Дальнейшее исследование указывает, что можно узнать, кэшируется ли путь (хешированный) при помощи команды type
- type diff
(в моем случае), который возвращает полный путь команды, подобной diff is /usr/bin/diff
, можно проявить хирургический подход и удалить кэш (хеш) для единственной команды с командой hash -d *command*
или в моем случае hash -d diff
, который сообщает об успехе с выводом bash: hash: diff: not found
, можно также взять менее изящное и в качестве успешного подхода дампа всего кэша (хеш) таблица с hash -r
, который ни о чем не сообщает.
Источники:
Опыт
, Как избавляются от - удар:/usr/{пакет}: Никакой такой файл или каталог
https://unix.stackexchange.com/questions/5609/how-do-i-clear-bashs-cache-of-paths-to-executables