如何确定我的路径上的哪个可执行文件将运行?

如何确定我的路径上的哪个可执行文件将运行?

我运行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,因此我假设无法跟踪它们并揭示其目标。

相关内容