Bash 记住已移动/删除的可执行文件的错误路径

Bash 记住已移动/删除的可执行文件的错误路径

当我做

which pip3

我明白了

/usr/local/bin/pip3

但是当我尝试执行时,pip3出现如下错误:

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

这是因为我最近删除了该文件。现在which命令指向另一个版本pip3/usr/local/bin但 shell 仍然记得错误的路径。我怎样才能让它忘记那条路?

手册which

which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as commands in
       a strictly POSIX-conformant shell.  It does this by searching the PATH for executable files matching the names of the arguments. It does not follow
       symbolic links.

/usr/local/bin和都/usr/bin在我的PATH变量中,并且/usr/local/bin/pip3不是符号链接,而是可执行文件。那么为什么不执行呢?

答案1

当您在其中运行命令时,bash它会记住该可执行文件的位置,因此不必PATH每次都再次搜索。因此,如果您运行可执行文件,然后更改位置,bash仍会尝试使用旧位置。您应该能够确认这一点,hash -t pip3它将显示旧位置。

如果你运行hash -d pip3它,它会告诉 bash 忘记旧位置,并在你下次尝试时找到新位置。

答案2

当更改可执行文件的位置(通过移动它或在不同位置提供新版本的可执行文件)时,请使用hash -d NAME强制 bash 在 PATH 中再次查找它。但是,如果 NAME 不在缓存中,则会出错,因此作为脚本的一部分,请使用如下内容:

if hash -t $NAME >& /dev/null; then 
  hash -d $NAME
fi

相关内容