移动文件后 Bash 找不到它

移动文件后 Bash 找不到它

在我移动最近执行过的可执行文件之后(或者更常见的是,在我从某处卸载某个东西并在其他地方安装了不同的版本之后),bash 就找不到它了,即使它仍然在 PATH 上。

例子:

find
sudo mv /usr/bin/find /usr/local/bin
find

结果是:

bash: /usr/bin/find: No such file or directory

这真的很烦人,因为这种事已经发生过几十次了。我该如何阻止这种情况发生?

答案1

要解决眼前的问题:

hash -r

为了防止再次发生这种情况:

set +h

禁用散列(即内存缓存)。

这可以放在 bash 启动文件中,例如/etc/bashrc

这个解决方案的缺点是,如果您安装了较慢的网络文件系统并将其放在 PATH 上,它会使速度稍微变慢。

真的,在我看来,这是一个古老的 bash 错误,几年前就应该修复了,这只是一种解决方法。

答案2

如果新副本不可执行,则可能会发生这种情况,因此请查看其权限并确保它们正确。

答案3

要永久修复问题而不完全禁用散列,请将其放入您的 bashrc 中:

shopt -s checkhash

请参阅我的其他回答以了解如何解决当前问题。

相关内容