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

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

У меня установлен OpenSSL 9.8 по умолчанию (Mac OS X 10.6.8), и я решил установить последнюю версию (1.0.1) через MacPorts ( 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

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

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

решение1

На странице руководства whereisясно сказано (выделено мной):

Утилита whereis проверяетстандартные бинарные каталогидля указанных программ, распечатывая пути всех найденных программ.

Искомый путь — это строка, возвращаемая утилитой sysctl(8) для строки ``user.cs_path''

В противоположность этому, whichэто инструмент, который обычно используется для проверки того, где находится исполняемый файл по пути вашего пользователя.

Утилита which берет список имен команд и ищет путь к каждому исполняемому файлу, который будет запущен.были ли эти команды действительно вызваны.

Это объясняет разницу, поскольку /opt/local/binэто не общесистемный «стандартный» путь (в конце концов, MacPorts — это совершенно необязательная установка), и по умолчанию она sysctlимеет только ./usr/bin:/bin:/usr/sbin:/sbinuser.cs_path

В общем случае придерживайтесь whichили which -aнайдите двоичный файл вместо использования whereis.


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

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

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

Связанный контент