26

У меня есть 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 , и это нормально? Есть ли способ получить равные результаты?

1 ответ1

30

В справочной 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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .