Bash在移动之后找不到文件

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

例:

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

结果是:

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

这真的很烦人,因为它发生在我身上几十次。 我怎样才能阻止这种情况发生?

为了解决眼前的问题:

 hash -r 

要阻止它再次发生:

 set +h 

禁用哈希(即内存中的caching)。

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

这个解决scheme的不足之处在于,如果你的networking文件系统安装缓慢并且在PATH上,它会降低速度。

真的,在我看来,这是一个古老的bash bug,应该在几年前就已经确定了,这只是一个解决方法。

如果新的副本不可执行,就会发生这种情况,所以请查看其权限并确保它们是正确的。

要永久解决这个问题,而不是完全禁用哈希,把这个在你的bashrc:

 shopt -s checkhash 

看到我的答案是如何解决眼前的问题。