webentwicklung-frage-antwort-db.com.de

Wo wird $ PATH in OS X 10.6 Snow Leopard festgelegt?

Ich tippe echo $PATH in die Kommandozeile und erhalte

/opt/local/bin:/opt/local/sbin:/Users/andrew/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/pear/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin

Ich frage mich, wo dies eingestellt wird, da meine .bash_login-Datei leer ist.

Ich bin besonders besorgt, dass nach der Installation von MacPorts ein Haufen Müll in /opt installiert wurde. Ich glaube nicht, dass dieses Verzeichnis in einer normalen Mac OS X-Installation existiert.

Update: Danke an jtimberman für die Korrektur meiner echo $PATH Anweisung

134
Andrew

Beim Start von bash werden bei jeder Anmeldung die folgenden Dateien gelesen. Für OS X bedeutet dies jedes Mal, wenn Sie ein neues Fenster für Terminal öffnen.

/etc/profile
~/.bash_profile
~/.bash_login   (if .bash_profile does not exist)
~/.profile      (if .bash_login does not exist)

Wenn Sie eine neue Shell durch Eingabe von bash in die Befehlszeile starten, wird .bashrc gelesen.

OS X verwendet außerdem ~/.MacOSX/environment.plist , um weitere Umgebungsvariablen festzulegen, einschließlich Pfaden, falls erforderlich.

Schließlich werden auch /etc/paths und /etc/paths.d von der Shell gelesen.


/opt/local/bin usw. werden in ~/.tcshrc von MacPorts hinzugefügt. Achten Sie auch darauf, in ~/.cshrc zu suchen.

157
Steve Folly

Schauen Sie sich die Datei /etc/paths an, die von /usr/libexec/path_helper verwendet wird, die von /etc/profile verwendet wird.

Verwenden Sie für MacPorts Sudo /etc/paths/opt/local/bin und öffnen Sie das Terminalfenster erneut.

47
Jim Logan

Im Ernst, Leopard gab uns einen neuen Weg, um Pfad hinzuzufügen. Erstellen Sie einfach eine Datei mit dem Pfad, den Sie hinzufügen möchten, und fügen Sie ihn in /etc/paths.d ein

Ein kurzes Beispiel dafür in einem Schritt ist:

echo "/some/path/to/add" >> /etc/paths.d/somefilename

Andernfalls können Sie einfach zu /etc/paths.d gehen und die Datei direkt dort ablegen. In beiden Fällen werden alle Pfadteile in den Dateien in diesem Verzeichnis an den Standardpfad angehängt.

Dies funktioniert auch für manpath.

Hier ist ein Link zu weiteren Details:

ars technica: Wie füge ich etwas in Schneeleopard PATH?

Zum Zweiten: MacPorts legt alles im opt-Verzeichnis ab, gerade weil es nicht von Apple verwendet wird. Auf diese Weise wird es nicht zu Konflikten kommen. Die Anleitung (exzellent geschrieben, übrigens) enthält eine Erklärung, warum opt verwendet wird und wie Sie diese Standardeinstellung ändern können, wenn Sie möchten.

MacPorts Guide

25
leanne

Geben Sie $ PATH als Echo ein, um Ihren Pfad anzuzeigen.

echo $PATH

Um Ihren Pfad festzulegen, bearbeiten Sie ~/.bash_profile und nicht ~/.bash_login.

4
jtimberman

Es gibt auch den von ssh festgelegten Pfad.

Vergleichen Sie echo $PATH mit ssh localhost 'echo $PATH'. Da ssh/etc/profile nicht liest, wird/usr/libexec/path_helper nicht ausgeführt und somit/etc/arrows übersprungen. Versuchen Sie es jetzt mit ssh localhost 'source /etc/profile; echo $PATH'. Die Wege sollten näher sein. Die verbleibenden Unterschiede werden wahrscheinlich auf Pfadänderungen in Ihrem .bash_profile (das auch von ssh übersprungen wird) und .bashrc (das von ssh gelesen wird) zurückzuführen sein.

Wenn Sie möchten, dass Ihr ssh-Pfad Ihrem normalen Terminalpfad ähnelt, können Sie source /etc/profile zu Ihrer .bashrc-Datei hinzufügen.

3
Keith Bentrup

Es kann definiert werden in:

  • Systemvariablen - /etc/paths
  • Benutzervariablen - siehe Erläuterung zu @Steve Folly
2
ericn

Tatsächlich wird es in Ihrer .profile-Datei anstelle von .bash_login gespeichert, und es ist üblich, dass MacPorts dies anstelle der .bash_login-Datei verwendet.

Das Verzeichnis /opt wird normalerweise von MacPorts erstellt und speichert seine Dateien in diesem Ordner.

1
ricbax

In Bezug auf das Dienstprogramm docs für /usr/libexec/path_helper wurden die anfänglichen Komponenten für $ PATH aus /etc/paths übernommen und sehen standardmäßig so aus

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

für OS-X Snow Leopard

1
A B