2009-11-11 18:48:39 +0000 2009-11-11 18:48:39 +0000
141
141

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

Ich gebe echo $PATH in die Befehlszeile ein 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 gesetzt 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 bei einer normalen Mac OS X-Installation überhaupt existiert.

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

Antworten (7)

161
161
161
2009-11-11 20:57:32 +0000

Wenn bash startet, liest es die folgenden Dateien jedes Mal, wenn Sie sich anmelden. Für die Zwecke von OS X bedeutet dies jedes Mal, wenn Sie ein neues Terminal-Fenster ö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 starten, indem Sie bash auf der Kommandozeile eingeben, liest es .bashrc

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

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


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

25
25
25
2011-03-25 18:07:37 +0000

Im Ernst, Leopard hat uns eine neue Möglichkeit gegeben, Pfade hinzuzufügen. Erstellen Sie einfach eine Datei, die den Pfadteil enthält, den Sie hinzufügen möchten, und legen Sie sie in /etc/paths.d ab

Ein schnelles Beispiel, um dies in einem Schritt zu tun, ist:

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

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

Das funktioniert auch für manpath.

Hier ist ein Link zu weiteren Details: ars technica: how do i add something to PATH in snow leopard?

Zu einer 2. Anmerkung: MacPorts legt alles in das opt-Verzeichnis, gerade weil es von Apples Sachen nicht benutzt wird. Auf diese Weise kommt es nicht zu Konflikten. Deren Anleitung (übrigens hervorragend geschrieben) hat eine Erklärung, warum opt verwendet wird und wie man diese Voreinstellung ändern kann, wenn man möchte. MacPorts-Anleitung

4
4
4
2009-11-11 19:07:28 +0000

Um Ihren Pfad anzuzeigen, echo $PATH.

echo $PATH

Um Ihren Pfad zu setzen, editieren Sie ~/.bash_profile, nicht ~/.bash_login.

3
3
3
2012-02-07 19:36:18 +0000

Außerdem gibt es den Pfad, wie er von ssh ermittelt wurde.

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

Wenn Sie möchten, dass Ihr ssh-Pfad ähnlich wie Ihr normaler Terminalpfad ist, können Sie source /etc/profile zu Ihrer .bashrc hinzufügen.

2
2
2
2013-06-01 09:50:21 +0000

Sie kann entweder definiert werden in:

  • Systemvariablen - /etc/paths
  • Benutzervariablen - siehe die Erklärung von @Steve Folly
1
1
1
2009-11-11 19:13:39 +0000

Eigentlich ist es in Ihrer .profile Datei gespeichert und es ist üblich, dass MacPorts diese anstelle der .bash_login Datei verwendet.

Auch das .bash_login-Verzeichnis wird normalerweise von MacPorts erstellt und es speichert seine Dateien in diesem Ordner.

1
1
1
2012-06-26 01:40:17 +0000

Bezüglich docs für das Dienstprogramm /usr/libexec/path_helper wurden die anfänglichen Komponenten für $PATH von /etc/paths übernommen und sehen standardmäßig wie

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

für OS-X Snow Leopard aus