Bash nie znajduje programu, mimo że jest na mojej ścieżce

26

Mam program na swojej drodze. Program działa po uruchomieniu z pełną ścieżką. Ale programu nie można znaleźć, gdy uruchomię go z samą nazwą.

Zasadniczo chcę zrozumieć, w jaki sposób możliwe jest wyświetlenie poniższych danych wyjściowych i jak to naprawić, aby mój program można było faktycznie znaleźć bez pełnej ścieżki:

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!?!?

Jestem na Ubuntu 12.04 za pomocą bash. Należy również pamiętać, że ostrzeżenie wyjściowe z oblężenia nie jest istotne dla celów tego pytania, ponieważ jestem zainteresowany jedynie tym, czy program można znaleźć i wywołać.

Jonasz
źródło

Odpowiedzi:

38

Zwróć uwagę na wynik tutaj:

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

Bash utrzymuje wewnętrzny skrót wcześniej znalezionych plików wykonywalnych na twojej ścieżce. W tym przypadku ma szczegóły, że kiedyś był plik wykonywalny w / usr / bin / siege i ponownie wykorzystuje tę ścieżkę, aby uniknąć konieczności ponownego wyszukiwania. Musisz powiedzieć bashowi, aby ręcznie zmienił ścieżkę do oblężenia w następujący sposób:

hash siege

Możesz także wyczyścić wszystkie zaszyfrowane lokalizacje:

hash -r
Chris Down
źródło
0

Inną przyczyną tego problemu może być to, że ścieżka do samego pliku wykonywalnego znajduje się na ścieżce, zamiast katalogu zawierającego plik wykonywalny .

Więc zamiast stawiać

/home/myDir/theExecutable

na ścieżce, po prostu dodaj to

/home/myDir
Matthias Braun
źródło