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

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

Это консольный вывод команд whois и 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 ответ

Решение

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

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

Другие вопросы по тегам