在我移动最近执行过的可执行文件之后(或者更常见的是,在我从某处卸载某个东西并在其他地方安装了不同的版本之后),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
请参阅我的其他回答以了解如何解决当前问题。