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

25

Eu tenho o padrão OpenSSL 9.8 (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 as saídas de console dos comandos which e whereis :

$ whereis openssl
/usr/bin/openssl

(este é o padrão do sistema)

$which openssl
/opt/local/bin/openssl

(isto é instalado via MacPorts)

$ openssl version
OpenSSL 1.0.1c 10 May 2012

(existe a versão da porta do Mac no PATH)

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

    
por jctim 29.05.2012 / 11:38

1 resposta

29

Na manpage de whereis , diz claramente (ênfase minha):

The whereis utility checks the standard binary directories for the specified programs, printing out the paths of any it finds.

The path searched is the string returned by the sysctl(8) utility for the ''user.cs_path'' string

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

The which utility takes a list of command names and searches the path for each executable file that would be run had these commands actually been invoked.

Isso explica sua diferença, pois /opt/local/bin não é um caminho "padrão" para todo o sistema - afinal, MacPorts é uma instalação totalmente opcional - e sysctl tem apenas /usr/bin:/bin:/usr/sbin:/sbin em seu user.cs_path por padrão.

Em geral, atenha-se a which ou which -a para encontrar um binário em vez de usar whereis .

Você pode, teoricamente, alterar user.cs_path por meio de

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

mas não sei se é uma boa ideia.

    
por 29.05.2012 / 11:46