Bash benim yolumda olsa bile bir program bulamıyor


26

Yolumda bir program var. Program belirtilen tam yolla yürütüldüğünde çalışır. Ancak program, yalnızca adıyla çalıştırdığımda bulunamıyor.

Temel olarak, aşağıdaki çıktının nasıl mümkün olduğunu ve programın gerçekte tam bir yol belirtilmeksizin bulunabilmesi için nasıl düzeltileceğini anlamak istiyorum:

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

Bash kullanarak Ubuntu 12.04'tayım. Ayrıca, kuşatmadan elde edilen uyarı çıktısının, yalnızca programın bulunup çağrılmayacağı ile ilgilendiğim için bu sorunun amaçları için uygun olmadığını lütfen unutmayın.

Yanıtlar:


38

Buradaki çıktıyı not edin:

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

Bash, yolunuzda daha önce bulunan çalıştırılabilir dosyaların dahili bir karmasını korur. Bu durumda, bir zamanlar / usr / bin / siege adresinde çalıştırılabilir bir dosya olduğunu ve tekrar aramak zorunda kalmamak için bu yolu tekrar kullandığını belirtmektedir. Böyle bir kuşatma yolunu elle yeniden biçimlendirmek için bash'e söylemeniz gerekir:

hash siege

Tüm karma konumları da temizleyebilirsiniz:

hash -r

0

Bu sorunun başka bir nedeni, yürütülebilir dosyaya giden yolun yürütülebilir dosya içeren dizini yerine yol üzerinde olmasıdır .

Yani koymak yerine

/home/myDir/theExecutable

yolda, sadece bunu ekle

/home/myDir
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.