web-dev-qa-db-ja.com

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

デフォルトの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ポートのバージョンがあります)

whereiswhichに異なるパスが返されるのはなぜですか?同等の結果を得る方法はありますか?

28
jctim

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

それがそんなにいいアイデアかどうかはわかりません。

32
slhck