Bash tidak menemukan program meskipun itu ada di jalanku

26

Saya memiliki program di jalur saya. Program berjalan ketika dieksekusi dengan path lengkap yang ditentukan. Tetapi program tidak dapat ditemukan ketika saya menjalankannya hanya dengan namanya.

Pada dasarnya, saya ingin memahami bagaimana output di bawah ini mungkin, dan bagaimana cara memperbaikinya sehingga program saya benar-benar dapat ditemukan tanpa path lengkap yang ditentukan:

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

Saya menggunakan Ubuntu 12,04 menggunakan bash. Harap perhatikan juga bahwa keluaran peringatan dari pengepungan tidak relevan untuk keperluan pertanyaan ini, karena saya hanya tertarik pada apakah program dapat ditemukan dan dijalankan.

Jonah
sumber

Jawaban:

38

Perhatikan hasilnya di sini:

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

Bash mempertahankan hash internal dari executable yang ditemukan sebelumnya di jalur Anda. Dalam kasus ini, ia memiliki rincian bahwa pada suatu waktu ada executable di / usr / bin / pengepungan, dan menggunakan kembali jalur itu untuk menghindari keharusan mencari lagi. Anda perlu memberi tahu bash untuk secara manual mengulangi path untuk pengepungan seperti:

hash siege

Anda juga dapat menghapus semua lokasi hash:

hash -r
Chris Down
sumber
0

Penyebab lain dari masalah ini mungkin karena path ke executable itu sendiri ada di path, bukan direktori yang berisi executable .

Jadi, bukannya menempatkan

/home/myDir/theExecutable

di jalan, tambahkan saja ini

/home/myDir
Matthias Braun
sumber