我运行which
并得到以下信息,
brendan$ which python
/opt/local/bin/python
brendan$ which -a python
/opt/local/bin/python
/usr/bin/python
brendan$ ls -l /opt/local/bin/python
lrwxr-xr-x 1 root admin 24 22 Jul 00:45 /opt/local/bin/python -> /opt/local/bin/python2.4
brendan$ python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
...
(this is the python version in /usr/local/bin)
我的观点是,which
没有告诉我主要的可执行文件,即优先执行的可执行文件。我怎样才能找到这个?
我在 Macbook 上运行 OSX 10.6,尽管这个问题对于 UNIX 类用户来说很常见。
更新:我已经删除了系统上许多冗余的 Python 版本(我至少有六个),并删除了PATH
一堆初始化文件中的各种糟糕的声明。在这个过程中,不知何故,一个新的 shell 现在显示了预期的输出(即which
显示/opt/local/bin/python
并且这就是执行的内容)。无论如何,感谢您的帮助!
答案1
which
当您没有运行时获得输出的输出-a
就是将被执行的输出。 (第二个-a
比第三个更可取)。
这不考虑 shell 的内置函数、别名和函数,这些函数将在任何其他可执行文件之前(从 shell 内)运行。
因此,最好还是用它来type
代替。
答案2
仅显示的which python
是您的控制台将使用的那个,除非您将 python 别名为其他名称 ( alias python='/usr/bin/python'
)。
答案3
根据 which 手册页,which
使用以下命令搜索 PATH 变量的组件与 bash 相同的算法,即依次搜索 PATH 的各个组成部分。因此,正如您所观察到的,其中(不带-a
)只会显示 PATH 中找到的第一个匹配项。
您的示例有些特殊,因为它返回的不是“主要可执行文件”,因为第一个匹配是符号链接。的联机帮助页中没有提及符号链接which
,因此我假设无法跟踪它们并揭示其目标。