Bash non sta trovando un programma anche se è sulla mia strada


26

Ho un programma sul mio cammino. Il programma viene eseguito quando eseguito con un percorso completo specificato. Ma il programma non può essere trovato quando lo eseguo solo con il suo nome.

In sostanza, voglio capire come sia possibile l'output di seguito e come risolverlo in modo che il mio programma possa effettivamente essere trovato senza un percorso completo specificato:

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

Sono su Ubuntu 12.04 usando bash. Inoltre, tieni presente che l'output di avviso dell'assedio non è rilevante ai fini di questa domanda, poiché sono interessato solo a trovare o invocare il programma.

Risposte:


38

Nota l'output qui:

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

Bash mantiene un hash interno di eseguibili trovati in precedenza nel tuo percorso. In questo caso, ha i dettagli sul fatto che un tempo c'era un eseguibile su / usr / bin / siege e riutilizzava quel percorso per evitare di dover cercare di nuovo. Devi dire a bash di ripassare manualmente il percorso dell'assedio in questo modo:

hash siege

Puoi anche cancellare tutte le posizioni con hash:

hash -r

0

Un'altra causa di questo problema potrebbe essere che il percorso dell'eseguibile stesso si trova sul percorso, anziché nella directory di contenimento dell'eseguibile .

Quindi invece di mettere

/home/myDir/theExecutable

sul percorso, aggiungi semplicemente questo

/home/myDir
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.