“whereis” e “qual” retornam caminhos diferentes no Mac OS X

“whereis” e “qual” retornam caminhos diferentes no Mac OS X

Eu tenho o OpenSSL 9.8 padrão (Mac OS X 10.6.8) e decidi instalar a versão mais recente (1.0.1) via MacPorts ( sudo port install openssl).

Estas são saídas do console dequaleOnde écomandos:

$ whereis openssl
/usr/bin/openssl

(este é o padrão do sistema)

$which openssl
/opt/local/bin/openssl

(isso é instalado via MacPorts)

$ openssl version
OpenSSL 1.0.1c 10 May 2012

(existe a versão da porta mac no PATH)

Por que caminhos diferentes são retornados para whereise whiche está tudo bem? Existe alguma maneira de obter resultados iguais?

Responder1

Na página de manual do whereis, diz claramente (ênfase minha):

O utilitário whereis verifica odiretórios binários padrãopara os programas especificados, imprimindo os caminhos de qualquer um que encontrar.

O caminho pesquisado é a string retornada pelo utilitário sysctl(8) para a string ``user.cs_path''

Ao contrário disso, whiché a ferramenta comumente usada para verificar onde está um binário para o caminho do seu usuário.

O utilitário which pega uma lista de nomes de comandos e pesquisa o caminho de cada arquivo executável que seria executadose esses comandos realmente tivessem sido invocados.

Isso explica sua diferença, já que /opt/local/binnão é um caminho "padrão" para todo o sistema - afinal, MacPorts é uma instalação totalmente opcional - e sysctlsó tem /usr/bin:/bin:/usr/sbin:/sbincomo user.cs_pathpadrão.

Em geral, atenha-se whichou which -aencontre um binário em vez de usar whereis.


Você pode teoricamente mudar user.cs_pathatravés

sysctl -w user.cs_path=/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

mas não sei se isso é uma boa ideia.

informação relacionada