"Whereis" und "which" geben unter Mac OS X unterschiedliche Pfade zurück

27

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

Dies sind die Konsolenausgaben der Befehle which und whereis :

$ 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 eine Mac-Port-Version in PATH)

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

jctim
quelle

Antworten:

31

In der Manpage von whereissteht klar (Hervorhebung von mir):

Das Dienstprogramm whereis überprüft die Standard-Binärverzeichnisse für die angegebenen Programme und druckt die Pfade aller gefundenen Programme 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 wird dieses whichTool häufig verwendet, um zu überprüfen, wo sich eine Binärdatei für den Pfad Ihres Benutzers befindet.

Das Dienstprogramm which verwendet eine Liste von Befehlsnamen und durchsucht den Pfad nach jeder ausführbaren Datei, die ausgeführt würde, wenn diese Befehle tatsächlich aufgerufen worden wären .

Das erklärt Ihren Unterschied, da /opt/local/binist kein systemweite „standard“ Weg nach allem, MacPorts ist ein völlig optional installations und sysctlhat nur /usr/bin:/bin:/usr/sbin:/sbinin seinem user.cs_pathstandardmäßig.

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


Sie können sich theoretisch user.cs_pathdurch verändern

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

aber ich weiß nicht, ob das so eine gute idee ist.

slhck
quelle
Danke, Sie haben hervorgehoben, dass "das Dienstprogramm whereis die Standard-Binärverzeichnisse überprüft " - das ist die Antwort!
Ich
Mach dir keine Sorgen, du wirst sicherlich bald mehr Ansehen bekommen. Willkommen bei Super User! :)
slhck
Habe das gleiche Problem mit psql unter OS X - leider ist user.cs_path nicht beschreibbar. Ich komme meiner Lösung jedoch näher, danke für diese hilfreiche Antwort!
user208769