我的道路上有一个计划。当使用指定的完整路径执行时,程序将运行。但是当我只用它的名字运行它时找不到该程序。
本质上,我想了解以下输出是如何可能的,以及如何修复它,以便在没有指定完整路径的情况下实际上可以找到我的程序:
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 的警告输出与此问题的目的无关,因为我只对是否可以找到并调用该程序感兴趣。
答案1
请注意此处的输出:
root:/usr/local/bin# siege
bash: /usr/bin/siege: No such file or directory
Bash 维护路径中之前找到的可执行文件的内部哈希。在这种情况下,它有详细信息表明 /usr/bin/siege 曾经有一个可执行文件,并重用该路径以避免再次搜索。您需要告诉 bash 手动重新哈希 siege 的路径,如下所示:
hash siege
您还可以清除所有散列位置:
hash -r
答案2
导致此问题的另一个原因可能是可执行文件本身的路径位于路径上,而不是可执行文件的路径上包含目录。
所以不要把
/home/myDir/theExecutable
在路径上,只需添加这个
/home/myDir