"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
но я не знаю, так ли это хорошая идея.