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