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を使用しています。また、siegeからの警告出力は、この質問の目的には関係ないことに注意してください。プログラムを見つけて呼び出すことができるかどうかだけに興味があるからです。

回答:


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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.