在bash中,"which"给出了错误的路径 - Python版本

Chr*_*per 13 python macos bash which

谁能解释一下python 2.6如何在我的机器上默认运行?它看起来像 python2.7,所以它似乎which没有给我正确的信息.

~> python --version
Python 2.6.5
~> which python
/opt/local/bin/python
~> /opt/local/bin/python --version
Python 2.7.2
~> ls -l /opt/local/bin/python
lrwxr-xr-x  1 root  admin  24 12 Oct 16:02 /opt/local/bin/python -> /opt/local/bin/python2.7
Run Code Online (Sandbox Code Playgroud)

当我生成错误时,我会看到真正运行的是什么.为什么会这样?

~> python -error-making-argument
Unknown option: -e
usage:     /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
Run Code Online (Sandbox Code Playgroud)

我该如何纠正呢?

- - 编辑: - -

来自评论中的建议:

~> alias
alias cp='cp -i'
alias gcc='gcc -Wall'
~> type python
python is /opt/local/bin/python
Run Code Online (Sandbox Code Playgroud)

Ada*_*eld 24

Bash使用内部哈希表来优化$PATH查找.当您安装一个与python您之前的现有程序(在本例中)具有相同名称的新程序时$PATH,Bash不知道它并继续使用旧程序.该which可执行文件不完整的$PATH搜索并打印出想要的结果.

要解决此问题,请运行该命令hash -d python.这python将从Bash的哈希表中删除并强制它在$PATH您下次调用时进行完整搜索.或者,您也可以运行hash -r以完全清除哈希表.

type 内建将告诉你如何在给定命令将被解释.如果它说一个命令被哈希,那意味着Bash将跳过$PATH搜索可执行文件.