Wie legt Mac OS X den Wert von $PATH fest?

Wie legt Mac OS X den Wert von $PATH fest?

Ich habe ein grundlegendes Verständnis davon, wie der $PATH eingestellt werden kann, aber gibt es eine Dokumentation, die vollständig beschreibt, wo Mac OS bekommtalledie Pfade, die an $PATH angehängt werden? Ich kenne Dinge wie /etc/profile, /etc/paths, und , aber gibt es andere Skripte, die sich letztendlich auf den Wert von $PATH auswirken? Ich kenne mich auch mit den Shells ohne Anmeldung und mit denen mit Anmeldung ( , ) /etc/profile.dnicht so gut aus , aber ich kenne die grundlegenden Unterschiede..bashrc.bash_profile

Antwort1

Normalerweise wird Ihr PATH von der Shell festgelegt. Für Bash ist allesim Handbuch erklärt. Sie können man bashden INVOCATIONTeil auch öffnen und direkt dorthin springen.

Wird als interaktive Login-Shell oder mit --login aufgerufen.

Wenn Bash als interaktive Login-Shell oder als nicht interaktive Shell mit der Option --login aufgerufen wird, liest und führt es zuerst Befehle aus der Datei /etc/profile aus, sofern diese Datei vorhanden ist. Nach dem Lesen dieser Datei sucht es in dieser Reihenfolge nach ~/.bash_profile, ~/.bash_login und ~/.profile und liest und führt Befehle aus der ersten Datei aus, die vorhanden und lesbar ist.

Wird als interaktive Shell ohne Anmeldung aufgerufen

Wenn eine interaktive Shell gestartet wird, die keine Login-Shell ist, liest und führt Bash Befehle aus ~/.bashrc aus, falls diese Datei existiert. In OS X gibt es zusätzlichpath_helperwelches den Inhalt liest /etc/paths.dund diesen an Ihren Pfad anhängt.

Der Schlüssel hier ist, dass das Terminal unter OS X standardmäßig eine Login-Shell öffnet, während unter Linux Shells normalerweise als Nicht-Login-Shells gestartet werden. Josh Staiger hateine gute Erklärung von Login- und Nicht-Login-Shells.

Es gibt also im Wesentlichen nur diese zwei drei, wo Sie Pfade festlegen können:

  • /etc/profile(was anruft path_helper)
  • /etc/pathsund /etc/paths.d(aufgerufen von path_helper)
  • Ihre Shell-Konfigurationsdatei ( .bash_profile)

Antwort2

Die Pfade in /etc/pathsund /etc/paths.d/*werden normalerweise ergänzt PATHdurchPfadhelfer. path_helperwird von ausgeführt /etc/profile, es wird also ausgeführt, wenn Bash als interaktive Anmelde-Shell aufgerufen wird, aber nicht, wenn Bash als Nicht-Anmelde-Shell oder nicht-interaktive Shell aufgerufen wird.

/etc/pathsenthält /usr/local/binstandardmäßig am Ende und /etc/paths.d/ist standardmäßig leer.

Terminal und iTerm 2 öffnen neue Shells standardmäßig als Login-Shells, und die Shell, die geöffnet wird, wenn Sie per SSH auf Ihren Computer zugreifen, ist ebenfalls eine Login-Shell. Viele Terminalemulatoren auf anderen Plattformen tmuxund der Shell-Modus in Emacs öffnen neue Shells jedoch als Nicht-Login-Shells.

Ich habe diese Zeile hinzugefügt zu /etc/launchd.conf:

setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin

Es ändert den Wert PATHdes Root-Launchd-Prozesses. Der Wert wird von allen anderen Prozessen übernommen, einschließlich der Launchd-Prozesse pro Benutzer. Sie können Änderungen vornehmen, /etc/launchd.confindem Sie den Prozess neu starten oder indem Sie ihn ausführen launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.confund neu starten.

Unter OS X ~/.profilewird nicht gelesen, wenn Sie sich grafisch anmelden. Wenn sowohl als ~/.bash_profileauch ~/.profilevorhanden sind, liest Bash ~/.profileauch nichts.

~/.MacOSX/environment.plistfunktionierte in 10.8 nicht mehr.

verwandte Informationen