"whereis" und "which" geben in Mac OS X unterschiedliche Pfade zurück

22884
jctim

Ich habe den Standard OpenSSL 9.8 (Mac OS X 10.6.8) und habe mich dafür entschieden, die neueste Version (1.0.1) über MacPorts ( sudo port install openssl) zu installieren .

Dies sind Konsolenausgaben von denen und whereis- Befehlen:

$ whereis openssl /usr/bin/openssl 

(Dies ist das Standardsystem)

$which openssl /opt/local/bin/openssl 

(dies wird über MacPorts installiert)

$ openssl version OpenSSL 1.0.1c 10 May 2012 

(es gibt die Version von mac port in PATH)

Warum werden verschiedene Pfade für whereisund zurückgegeben which, und ist das in Ordnung? Gibt es eine Möglichkeit, gleiche Ergebnisse zu erzielen?

25

1 Antwort auf die Frage

29
slhck

In der Manpage von whereisheißt es klar (Hervorhebung meines):

Das Dienstprogramm whereis überprüft die Standard-Binärverzeichnisse nach den angegebenen Programmen und gibt die Pfade aller gefundenen Dateien aus.

Der gesuchte Pfad ist die Zeichenfolge, die vom Dienstprogramm sysctl (8) für die Zeichenfolge "user.cs_path" zurückgegeben wird

Im Gegensatz dazu whichwird das Tool normalerweise verwendet, um zu überprüfen, wo sich eine Binärdatei für den Pfad Ihres Benutzers befindet.

Das Dienstprogramm which nimmt eine Liste mit Befehlsnamen und durchsucht den Pfad für jede ausführbare Datei, die ausgeführt werden würde, wenn diese Befehle tatsächlich aufgerufen wurden .

Das erklärt Ihren Unterschied, da /opt/local/bines sich nicht um einen systemweiten "Standardpfad" handelt - MacPorts ist eine vollständig optionale Installation - und hat sysctlnur standardmäßig /usr/bin:/bin:/usr/sbin:/sbineine user.cs_pathStandardeinstellung.

Bleiben Sie im Allgemeinen bei whichoder which -a, um eine Binärdatei zu finden, anstatt sie zu verwenden whereis.


Sie können theoretisch verändern user.cs_pathdurch

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

Aber ich weiß nicht, ob das eine gute Idee ist.

Danke, Sie haben hervorgehoben, dass "das Dienstprogramm whereis die Standard-Binärverzeichnisse überprüft" - das ist die Antwort! _kann nicht für Sie antworten, weil es sich um einen geringen Ruf handelt ((_ jctim vor 11 Jahren 0
Keine Sorge, Sie werden sicherlich bald mehr Ansehen bekommen. Willkommen bei Super User! :) slhck vor 11 Jahren 0
Habe dasselbe Problem mit psql unter OS X - leider ist user.cs_path nicht beschreibbar. Wenn ich meiner Lösung näher komme, danke ich Ihnen für diese nützliche Antwort! user208769 vor 11 Jahren 0