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


27

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

これらは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、これは大丈夫でしょうか?同等の結果を得る方法はありますか?

回答:


31

のマンページではwhereis、明確に次のように記載されています(強調鉱山):

whereisユーティリティは、指定されたプログラムの標準バイナリディレクトリをチェックし、見つかったパスを出力します。

検索されるパスは、「user.cs_path」文字列に対してsysctl(8)ユーティリティによって返される文字列です

それとwhichは逆に、ユーザーのパスのバイナリがどこにあるかを確認するために一般的に使用されるツールです。

whichユーティリティは、コマンド名のリストを取得し、これらのコマンドが実際に呼び出された場合に実行される各実行可能ファイルのパスを検索します

以来、それは、あなたの違いを説明し/opt/local/bin、システム全体の「標準」パスの後にすべてではない、MacPortsのは完全にオプションインストールとあるsysctlのみであり/usr/bin:/bin:/usr/sbin:/sbin、その中でuser.cs_path一人当たりのデフォルト。

一般に、を使用するのではなく、バイナリに固執するwhichwhich -a、バイナリを見つけますwhereis


あなたは理論的に変更user.cs_pathすることができます

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

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


おかげで、「whereisユーティリティは標準のバイナリディレクトリをチェックする」と強調しました-それが答えです!小さな評判の原因に答えるために投票できませんでした((
-jctim

心配する必要はありません。きっとすぐに評判が上がるでしょう。スーパーユーザーへようこそ!:)
slhck

OS Xのpsqlでも同じ問題が発生します-残念ながら、user.cs_pathは書き込みできません。しかし、私のソリューションに近づいて、そのような有用な答えをありがとう!
user208769
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.