Mac OS X では、「whereis」と「which」が異なるパスを返す

Mac OS X では、「whereis」と「which」が異なるパスを返す

デフォルトの OpenSSL 9.8 (Mac OS X 10.6.8) を入手しましたが、MacPorts ( ) 経由で最新バージョン (1.0.1) をインストールすることにしましたsudo port install openssl

これらはコンソール出力ですどれのそしてどこにコマンド:

$ 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:/sbin含まれています。user.cs_path

一般に、バイナリを見つけるには、 を使用するのではなく、whichまたはを使用します。which -awhereis


理論的user.cs_pathには、

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

しかし、それが本当に良い考えであるかどうかは分かりません。

関連情報