Bash 没有找到程序,即使它在我的路径上

Jon*_*nah 29 bash path

我的路上有一个程序。程序在使用指定的完整路径执行时运行。但是当我只用它的名字运行它时,找不到该程序。

本质上,我想了解以下输出是如何可能的,以及如何修复它,以便在没有指定完整路径的情况下实际上可以找到我的程序:

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!?!?
Run Code Online (Sandbox Code Playgroud)

我在 Ubuntu 12.04 上使用 bash。另请注意,siege 的警告输出与此问题的目的无关,因为我只对是否可以找到并调用该程序感兴趣。

Chr*_*own 44

注意这里的输出:

root:/usr/local/bin# siege
bash: /usr/bin/siege: No such file or directory
Run Code Online (Sandbox Code Playgroud)

Bash 维护您路径中先前找到的可执行文件的内部散列。在这种情况下,它有详细信息,曾经在 /usr/bin/siege 中有一个可执行文件,并重用该路径以避免再次搜索。您需要告诉 bash 手动重新哈希围攻路径,如下所示:

hash siege
Run Code Online (Sandbox Code Playgroud)

您还可以清除所有散列位置:

hash -r
Run Code Online (Sandbox Code Playgroud)