«whereis» и «which» возвращают разные пути в Mac OS X

22945
jctim

У меня есть OpenSSL 9.8 по умолчанию (Mac OS X 10.6.8) и я решил установить самую новую версию (1.0.1) через MacPorts ( sudo port install openssl).

Это консольный вывод которых и WhereIs команды:

$ whereis openssl /usr/bin/openssl 

(это система по умолчанию)

$which openssl /opt/local/bin/openssl 

(устанавливается через MacPorts)

$ openssl version OpenSSL 1.0.1c 10 May 2012 

(есть версия Mac порта в PATH)

Почему для whereisи возвращаются разные пути which, и это нормально? Есть ли способ получить равные результаты?

25

1 ответ на вопрос

29
slhck

В справочной странице 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 -aчтобы найти двоичный файл, а не использовать whereis.


Вы можете теоретически изменить user.cs_pathчерез

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

но я не знаю, так ли это хорошая идея.

Спасибо, вы подчеркнули, что «утилита whereis проверяет ** стандартные двоичные каталоги **» - вот ответ! _Не могу проголосовать за то, что вы ответили из-за маленькой репутации ((_ jctim 12 лет назад 0
Не волнуйтесь, вы наверняка скоро получите больше репутации. Добро пожаловать в Супер пользователя! :) slhck 12 лет назад 0
Та же проблема с psql на OS X - к сожалению user.cs_path не доступен для записи. Приближаясь к моему решению, спасибо за такой полезный ответ! user208769 12 лет назад 0