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

J'ai un programme sur mon path. Le programme s'exécute lorsqu'il est exécuté avec un path complet spécifié. Mais le programme ne peut pas être trouvé quand je le lance avec juste son nom.

Essentiellement, je veux comprendre comment la sortie ci-dessous est possible, et comment la corriger afin que mon programme puisse être trouvé sans un path 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 aussi noter que les avertissements produits par le siège ne sont pas pertinents aux fins de cette question, car je ne suis intéressé que par le fait que le programme puisse être trouvé ou invoqué.

Notez la sortie ici:

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

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

 hash siege 

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

 hash -r 

Chris a résolu votre problème immédiat, mais vous avez également demandé de comprendre les résultats que vous avez vus. Commençant par la première ligne …

 root:/usr/local/bin# ./siege 

Le préfixe (./) signifie searchr le file 'siege' uniquement dans le directory courant. Le PATH n'est pas consulté du tout. Ainsi, / usr / local / bin / siege doit exister et apparemment il le fait ou bien vous obtenez une erreur "No such file or directory".

 siege: could not open /usr/local/bin/etc/siegerc 

Cette ligne nous indique que le script / usr / local / bin / siege tente probablement d'ouvrir 'etc / siegerc' au lieu de '/ etc / siegerc'. Sans le leader (/), bash search 'etc / siegerc' dans le directory courant. Ainsi, / usr / local / bin / etc / siegerc. Encore une fois, le PATH n'est pas consulté du tout. PATH est uniquement recherché pour les noms de command. Pour toute autre chose, le script doit utiliser le path complet. Une simple illustration …

  root@LX03:~ ls -l df ls: cannot access df: No such file or directory root@LX03:~ ls -l /bin/df -rwxr-xr-x 1 root root 67316 2011-08-17 11:04 /bin/df 

Une autre cause de ce problème peut être que le path de l'exécutable lui-même est sur le path, au lieu du directory contenant l'exécutable.

Donc au lieu de mettre

 /home/myDir/theExecutable 

sur le path, ajoutez simplement ceci

 /home/myDir