„Whereis” i „which” zwracają różne ścieżki w Mac OS X

27

Mam domyślny OpenSSL 9.8 (Mac OS X 10.6.8) i zdecydowałem się zainstalować najnowszą wersję (1.0.1) za pośrednictwem MacPorts ( sudo port install openssl).

Są to dane wyjściowe konsoli, które i komendy whereis :

$ whereis openssl
/usr/bin/openssl

(jest to domyślny system)

$which openssl
/opt/local/bin/openssl

(jest instalowany przez MacPorts)

$ openssl version
OpenSSL 1.0.1c 10 May 2012

(w wersji PATH znajduje się wersja portu Mac)

Dlaczego zwracane są różne ścieżki whereisi whichczy jest w porządku? Czy jest jakiś sposób, aby uzyskać równe wyniki?

jctim
źródło

Odpowiedzi:

31

Na stronie podręcznika whereiswyraźnie napisano (podkreśl moje):

Narzędzie whereis sprawdza standardowe katalogi binarne dla określonych programów, drukując ścieżki wszystkich znalezionych programów.

Przeszukana ścieżka to ciąg zwracany przez narzędzie sysctl (8) dla ciągu `` user.cs_path ''

W przeciwieństwie do tego, whichnarzędzie jest powszechnie używane do sprawdzania, gdzie znajduje się plik binarny na ścieżkę użytkownika.

Które narzędzie pobiera listę nazw poleceń i przeszukuje ścieżkę dla każdego pliku wykonywalnego, który zostałby uruchomiony, gdyby te polecenia zostały faktycznie wywołane .

To wyjaśnia swoją różnicę, ponieważ /opt/local/binnie jest w całym systemie „standard” path-wszak MacPorts jest całkowicie opcjonalna instalacja-a sysctlma jedynie /usr/bin:/bin:/usr/sbin:/sbinw swojej user.cs_pathdomyślnie za.

Ogólnie rzecz biorąc, trzymaj się whichlub which -aznajdź plik binarny zamiast używać whereis.


Teoretycznie można zmienić user.cs_pathpoprzez

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

ale nie wiem, czy to taki dobry pomysł.

slhck
źródło
Dzięki, podkreśliłeś, że „Narzędzie whereis sprawdza standardowe katalogi binarne ” - oto odpowiedź! nie mogłem głosować za odpowiedzią z powodu małej reputacji ((
jctim
Nie martw się, na pewno wkrótce zyskasz lepszą reputację. Witamy w Super User! :)
slhck
Mają ten sam problem z psql w OS X - niestety user.cs_path nie jest zapisywalny. Zbliżając się do mojego rozwiązania, dziękuję za tak przydatną odpowiedź!
user208769