“whereis”和“which”在 Mac OS X 中返回不同的路径

“whereis”和“which”在 Mac OS X 中返回不同的路径

我有默认的 OpenSSL 9.8(Mac OS X 10.6.8),并决定通过 MacPorts(sudo port install openssl)安装最新版本(1.0.1)。

这些是控制台输出哪个哪里命令:

$ whereis openssl
/usr/bin/openssl

(这是系统默认的)

$which openssl
/opt/local/bin/openssl

(通过 MacPorts 安装)

$ openssl version
OpenSSL 1.0.1c 10 May 2012

(PATH 中有 mac 端口的版本)

为什么whereis和会返回不同的路径which,这正常吗?有没有办法得到相同的结果?

答案1

在的手册页中whereis,它清楚地说(重点是我的):

whereis 实用程序检查标准二进制目录对于指定的程序,打印出它找到的任何程序的路径。

搜索的路径是 sysctl(8) 实用程序为“user.cs_path”字符串返回的字符串

与此相反,which该工具通常用于检查二进制文件在用户路径中的位置。

which 实用程序获取命令名称列表并搜索将要运行的每个可执行文件的路径这些命令是否真的被调用

这就解释了您的差异,因为/opt/local/bin它不是系统范围的“标准”路径 - 毕竟,MacPorts 是一个完全可选的安装 - 并且只有在其默认情况下sysctl才有。/usr/bin:/bin:/usr/sbin:/sbinuser.cs_path

一般来说,坚持使用whichwhich -a来查找二进制文件,而不是使用whereis


理论上你可以user.cs_path通过

sysctl -w user.cs_path=/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

但我不知道这是不是个好主意。

相关内容