为什么运行“错误”的可执行文件?

为什么运行“错误”的可执行文件?

我正在尝试跑步蟒蛇来自巴什(版本4.4.19)命令行。

ipython作为一名 Python 开发人员,我在不同的virtualenv路径中安装了不同版本的各种版本,因此了解我正在运行哪个版本非常重要。因此,$PATH当我改变时virtualenv, 总是会改变,这将是 的典型值PATH

$ echo $PATH
/Users/jab/.virtualenvs/tools/bin:/Users/jab/bin:/Users/jab/src/git/hub/jab/bin:/usr/local/gnu:/bin:/usr/local/bin:/usr/bin

其中重要的细节是第一个条目是“ /Users/jab/.virtualenvs/tools/bin”,并且该文件/Users/jab/.virtualenvs/tools/bin/ipython确实存在:

$ ls -l /Users/jab/.virtualenvs/tools/bin/ipython
-rwxr-xr-x 1 jab staff 252 May 11 15:18 /Users/jab/.virtualenvs/tools/bin/ipython

正如预期的那样,表示该文件将作为“ ”命令which运行$ ipython

$ which ipython
/Users/jab/.virtualenvs/tools/bin/ipython

$ $(which ipython) -c "import sys; print(sys.executable)"
/Users/jab/.virtualenvs/tools/bin/python

然而,实际情况并非如此,而是/usr/local/bin/ipython运行

$ ipython -c "import sys; print(sys.executable)"
/usr/local/bin/python3

有人可以解释为什么bash忽略我$PATH并使用“错误”的可执行文件吗?我需要改变什么(在我的 bashrc,或在我的系统上 ( macOS 10.12.3)),以便 bash 按照我的 确定的顺序选择可执行文件$PATH

注意:这不是重复的Bash 没有找到程序,即使它在我的路径上,因为这会询问 PATH 如何查找任何程序,而这个问题是为什么错误的程序找到。

答案1

看起来在您的 bash 会话中的某个先前时间,调用了“错误的”可执行文件,然后 Bash 记住了它的路径名(这是正常的,此功能可防止进一步PATH查找已知命令)。

要解决这个问题,你应该运行

$ hash -d ipython

这会清除记住的位置ipython,因此 Bash 需要PATH再次搜索以找到该命令(此时它会找到正确的可执行文件)。

相关内容