当我做
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