「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

但我不知道這是否是一個好主意。

相關內容