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. Також зверніть увагу, що попередження від облоги не є актуальним для цілей цього питання, тому що мене цікавить лише те, чи можна знайти та вилучити програму.

Відповіді:


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.