Bash не находит программу, даже если она на моем пути


26

У меня есть программа на моем пути. Программа запускается при выполнении с указанным полным путем. Но программа не может быть найдена, когда я запускаю ее только с ее именем.

По сути, я хочу понять, как возможен приведенный ниже вывод, и как это исправить, чтобы мою программу можно было найти без указания полного пути:

root:/usr/local/bin# ./siege
****************************************************
siege: could not open /usr/local/bin/etc/siegerc
run 'siege.config' to generate a new .siegerc file
****************************************************
root:/usr/local/bin# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
root:/usr/local/bin# siege
bash: /usr/bin/siege: No such file or directory
root:/usr/local/bin# wtf!?!?

Я на Ubuntu 12.04 использую bash. Также обратите внимание, что вывод предупреждения от siege не имеет значения для целей этого вопроса, так как меня интересует только, можно ли найти и запустить программу.

Ответы:


38

Обратите внимание на вывод здесь:

root:/usr/local/bin# siege
bash: /usr/bin/siege: No such file or directory

Bash поддерживает внутренний хэш ранее найденных исполняемых файлов на вашем пути. В этом случае он содержит сведения о том, что когда-то существовал исполняемый файл в / usr / bin / siege, и повторно использует этот путь, чтобы избежать необходимости повторного поиска. Вы должны указать bash вручную перефразировать путь для осады следующим образом:

hash siege

Вы также можете очистить все хешированные местоположения:

hash -r

0

Другая причина этой проблемы может заключаться в том, что путь к самому исполняемому файлу лежит по пути, а не к каталогу, содержащему исполняемый файл .

Так что вместо того, чтобы положить

/home/myDir/theExecutable

на пути, просто добавьте это

/home/myDir
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.