移动文件后 Bash 找不到文件

Rob*_*een 3 bash cache

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

例子:

find
sudo mv /usr/bin/find /usr/local/bin
find
Run Code Online (Sandbox Code Playgroud)

结果是:

bash: /usr/bin/find: No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*een 6

要清除眼前的问题:

hash -r
Run Code Online (Sandbox Code Playgroud)

要阻止它再次发生:

set +h
Run Code Online (Sandbox Code Playgroud)

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

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

此解决方案的缺点是,如果您在 PATH 上安装了较慢的网络文件系统,它会稍微减慢速度。

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