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


29

当我做

which pip3

我懂了

/usr/local/bin/pip3

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

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

这是因为我最近删除了该文件。现在which命令指向的另一个版本pip3是位于/usr/local/bin但外壳还记得在错误的道路。我该如何忘记那条路?

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不是一个符号链接,它是一个可执行文件。那为什么不执行呢?


的内容是/usr/local/bin/pip3什么?
托马斯

您以前是否曾pip3在该外壳中运行过该外壳/usr/bin,然后再将其移动?
埃里克·雷诺夫

1
如果跑步,您会看到什么hash -t pip3
埃里克·雷诺夫

1
@Eric Renouf hash -t pip3印刷品/usr/bin/pip3
Spiderface '17

2
除非您有很好的理由,否则应始终使用typee而不是whichtype内置在posix外壳中,并告诉您外壳将执行什么操作,而不是告诉您which试图猜测该外壳将执行什么操作。
icarus

Answers:


37

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

如果您运行hash -d pip3它,它将告诉bash忘记旧位置,下次尝试时应找到新位置。


4
hash -r清除整个表。
mattdm

是的,那行得通。我认为我将更改问题的标题,因为它与无关which
蜘蛛脸

1
@spiderface对于大多数bash功能而言,它help比人工更易于使用,因此在这里help hash
Eric Renouf

3
@spiderface type hash会告诉您它是内置的shell,因此它没有自己的手册页。而是使用help hashhash在bash的手册页中查找。
deltab

1
或者,如果您真的要使用man...,因为hash它是bash内置的,则需要man bash找到它。但是手册页上所说的实际上是help hashbash所说的。
MAP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.