Bash ne trouve pas de programme même s'il est sur mon chemin

26

J'ai un programme sur mon chemin. Le programme s'exécute lorsqu'il est exécuté avec un chemin d'accès complet spécifié. Mais le programme ne peut pas être trouvé lorsque je l'exécute avec juste son nom.

Essentiellement, je veux comprendre comment la sortie ci-dessous est possible et comment la corriger afin que mon programme puisse réellement être trouvé sans un chemin d'accès complet spécifié:

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

Je suis sur Ubuntu 12.04 en utilisant bash. Veuillez également noter que la sortie d'avertissement de siège n'est pas pertinente aux fins de cette question, car je souhaite uniquement savoir si le programme peut être trouvé et appelé.

Jonas
la source

Réponses:

38

Notez la sortie ici:

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

Bash conserve un hachage interne des exécutables trouvés précédemment sur votre chemin. Dans ce cas, il contient des détails indiquant qu'à un moment donné il y avait un exécutable dans / usr / bin / siege, et réutilise ce chemin pour éviter d'avoir à effectuer une nouvelle recherche. Vous devez dire à bash de ressasser manuellement le chemin du siège comme ceci:

hash siege

Vous pouvez également effacer tous les emplacements hachés:

hash -r
Chris Down
la source
0

Une autre cause de ce problème pourrait être que le chemin d'accès à l'exécutable lui-même se trouve sur le chemin d'accès, au lieu du répertoire contenant l'exécutable .

Donc au lieu de mettre

/home/myDir/theExecutable

sur le chemin, ajoutez simplement ceci

/home/myDir
Matthias Braun
la source