Почему which и whereis предоставляют разные местоположения и как я могу предпочесть один путь другому? [дубликат]

Недавно я скомпилировал и установил 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
2
задан 27 January 2018 в 20:32

1 ответ

Первопричина этой проблемы кэшировалась (хешированные) записи в таблице поиска удара. 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

1
ответ дан 2 December 2019 в 05:06

Другие вопросы по тегам:

Похожие вопросы: