
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.d
nicht 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 bash
den INVOCATION
Teil 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ätzlich
path_helper
welches den Inhalt liest/etc/paths.d
und 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 anruftpath_helper
)/etc/paths
und/etc/paths.d
(aufgerufen vonpath_helper
)- Ihre Shell-Konfigurationsdatei (
.bash_profile
)
Antwort2
Die Pfade in /etc/paths
und /etc/paths.d/*
werden normalerweise ergänzt PATH
durchPfadhelfer. path_helper
wird 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/paths
enthält /usr/local/bin
standardmäß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 tmux
und 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 PATH
des 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.conf
indem Sie den Prozess neu starten oder indem Sie ihn ausführen launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf
und neu starten.
Unter OS X ~/.profile
wird nicht gelesen, wenn Sie sich grafisch anmelden. Wenn sowohl als ~/.bash_profile
auch ~/.profile
vorhanden sind, liest Bash ~/.profile
auch nichts.
~/.MacOSX/environment.plist
funktionierte in 10.8 nicht mehr.