在bash中,“bash”;其中";提供了不正确的路径-Python版本

在bash中,“bash”;其中";提供了不正确的路径-Python版本,python,bash,macos,Python,Bash,Macos,有人能解释一下python 2.6是如何在我的机器上默认运行的吗?它看起来像是python指向了2.7,所以它似乎是,而没有给我正确的信息 ~> 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

有人能解释一下python 2.6是如何在我的机器上默认运行的吗?它看起来像是
python
指向了2.7,所以它似乎是
,而
没有给我正确的信息

~> 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
当我生成一个错误时,我看到真正运行的是什么。为什么会这样

~> 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.
我怎样才能纠正它呢


根据评论中的建议:

~> alias
alias cp='cp -i'
alias gcc='gcc -Wall'
~> type python
python is /opt/local/bin/python

我刚刚检查了我的
.bash\u配置文件
,其中包含以下内容:

# Setting PATH for MacPython 2.6
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.6/bin:/usr/local/git/bin:${PATH}"
export PATH
对此进行评论已解决了我的问题

如果有人能告诉我为什么
哪个
类型
仍然给出了错误的答案,我将非常感激,并将给他们打勾

谢谢你的指导

Bash使用一个函数来优化
$PATH
查找。当您在前面的
$PATH
中安装了一个与现有程序同名的新程序(本例中为
python
)时,Bash并不知道该程序,而是继续使用旧程序。
可执行文件执行完整的
$PATH
搜索并打印出预期结果

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


将告诉您如何解释给定命令。如果它说某个命令是散列的,这意味着Bash将跳过对可执行文件的
$PATH
搜索。

python是否被别名为2.6.5版本?在提示下键入
别名
。尝试键入python
而不是
哪个python
。它将向您显示将要运行的实际内容,包括别名和shell函数,而
则不显示这些内容。@Greenmart等人:我已经更新了我的问题。如果使用
键入-a python
,您将获得更大的成功,它将向您显示所有别名/函数/路径中心,而无需从路径中删除它们,
which——所有python
(或与OSX等效的操作系统)的结果是什么?关于ls-l/opt/local/bin/python2.7
文件/opt/local/bin/python2.7
?python-v的
?在运行
python
之前和之后运行
hash-tpython
时是否都有错误?在Python上使用
dtrace
?似乎是一个错误,它会更改
$PATH
变量,但不会自动清除哈希表。在我的Bash版本(Linux上为3.2.25)上,确实如此。太棒了!感谢您的洞察力!=)@马克:正如迈克尔·霍夫曼(Michael Hoffman)所说,当
$PATH
发生变化时(在Mac OS X上发布的GNU Bash 4.1.9(2)中进行了测试),它确实会清除哈希表。当
$PATH
发生更改时,问题不会发生,而是在创建
/opt/local/bin/python
时,在包含另一个同名可执行文件的目录之前,将新的可执行文件安装到路径中的现有目录中,Bash对此一无所知。它可以为路径中的所有目录请求文件系统通知,但它没有(可能会增加明显的性能损失?我不知道)。另请参阅