デフォルトのOpenSSL 9.8(Mac OS X 10.6.8)を使用していて、MacPorts(Sudo port install openssl
)。
これらはwhichおよびwhereisコマンドのコンソール出力です:
$ 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
に異なるパスが返されるのはなぜですか?同等の結果を得る方法はありますか?
whereis
のマンページでは、次のようにはっきりと書かれています(私の強調):
Whereisユーティリティは、指定されたプログラムの標準バイナリディレクトリをチェックし、見つかったパスを出力します。
検索されるパスは、sysctl(8)ユーティリティによって「user.cs_path」文字列に対して返された文字列です
それとは逆に、which
は、ユーザーのパスのバイナリの場所を確認するために一般的に使用されるツールです。
Whichユーティリティは、コマンド名のリストを取得して、実行される各実行可能ファイルのパスを検索しますこれらのコマンドが実際に呼び出された場合。
/opt/local/bin
はシステム全体の「標準」パスではないため、MacPortsは完全にオプションのインストールであり、sysctl
には/usr/bin:/bin:/usr/sbin:/sbin
のみがuser.cs_path
デフォルトあたり。
一般的に、which
を使用するのではなく、whereis
またはwhich -a
を使用してバイナリを検索します。
理論的にはuser.cs_path
を変更できます
sysctl -w user.cs_path=/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
それがそんなにいいアイデアかどうかはわかりません。