У меня установлен 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:/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
но я не знаю, такая ли это хорошая идея.