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

139

Ich tippe echo $PATHauf der Kommandozeile und bekomme

/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_loginDatei leer ist.

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

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

Andrew
quelle
5
Kommentar von SMcCandlish :easiest solution when you want to make a site-wide path change (e.g. to include /usr/libexec or whatever) is to edit /etc/paths . While the new /etc/paths.d/ thing is functional, it's actually more hassle than maintaining a single file. As others have hinted but not spelled out, if the path changes you want would be useful only for one user, it's best to make that change in the bash and/or tcsh config files in that user's home directory instead of system-wide.
Sathyajith Bhat
@Sathya, es scheint mir /etc/paths.dnützlich für Installationsskripte zu sein. Wenn mein Installationsskript das installierte Programm zum Pfad hinzufügen soll, kann ich eine Datei darin ablegen /etc/paths.d. Wenn ich den Pfad manuell bearbeiten möchte, /etc/pathsist dies eine bessere Option.
Haydenmuhl
Ich habe ein Skript erstellt, das hauptsächlich auf diesem Beitrag basiert und schnell ausgibt
Pedro Lopes

Antworten:

161

Beim bashStart werden bei jeder Anmeldung die folgenden Dateien gelesen. Für OS X bedeutet dies jedes Mal, wenn Sie ein neues TerminalFenster ö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 bashin die Befehlszeile starten , lautet sie.bashrc

In OS X werden außerdem ~/.MacOSX/environment.plistweitere Umgebungsvariablen festgelegt, einschließlich Pfade, falls erforderlich.

Schließlich /etc/pathsund /etc/paths.dwerden auch von der Shell gelesen.


/opt/local/binetc. werden ~/.tcshrcvon MacPorts hinzugefügt . Schauen Sie auch unbedingt rein ~/.cshrc.

Steve Folly
quelle
5
Anscheinend ~/.MacOSX/environment.plistfunktioniert das bei manchen Leuten nicht. In Pfad für OS X ändern wird eine Alternative unter Verwendung des Ordners /etc/paths.dbeschrieben. Ich habe das nicht getestet.
Arjan
+1 für ~/.cshrc. War verrückt, um herauszufinden, warum ~/.profilees nicht funktionierte.
Tomlogic
Ich denke, diese Antwort ist unvollständig. Ich versuche herauszufinden, wo ein fehlerhafter (nicht vorhandener) Pfad ist: / usr / bin / local, über den sich meine Shell beschwert, und er befindet sich in keiner dieser Dateien.
Tommy
Ich denke, es .bashrcwird gelesen, egal ob Sie tippen bashoder nicht.
Xiao Peng - ZenUML.com
48

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

Verwenden Sie für MacPorts sudo /etc/paths/opt/local/bindas Terminalfenster und öffnen Sie es erneut.

Gemeinschaft
quelle
25

Im Ernst, Leopard gab uns einen neuen Weg, um Pfad hinzuzufügen. Erstellen Sie einfach eine Datei mit dem Pfadteil, 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 PATH in snow leopard etwas hinzu?

Zum Zweiten: MacPorts legt alles im opt-Verzeichnis ab, gerade weil es nicht von Apples Sachen 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-Handbuch

Leanne
quelle
Sehr cool. Jetzt müssen wir nur noch diese pfadabhängigen Anwendungen dazu bringen, unsere Profildateien nicht mehr zu verschmutzen ...
Daniel Beck
Liebe es. Einfach!
Andrew Hedges
Kommentar von SMcCandlish :I have to concur that there's nothing weird or bad about MacPorts using /opt (likewise Fink uses /sw); trying to replace stock Mac BSD parts with bleeding-edge builds from external projects like these is a recipe for an unusable system that requires an OS reinstallation.
Sathyajith Bhat
Einzelne Zeile, kein Anhängen an Dateien und einfaches Entfernen. Lieben Sie dieses. Vielen Dank, Leanne
Ibrahim Lawal
4

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

echo $PATH

Bearbeiten Sie ~/.bash_profilenicht , um Ihren Pfad festzulegen ~/.bash_login.

jtimberman
quelle
3

Es gibt auch den von ssh festgelegten Pfad .

Vergleichen Sie echo $PATHmit 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 ssh localhost 'source /etc/profile; echo $PATH'. Die Wege sollten näher sein. 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 Ihrem normalen Terminalpfad ähnelt, können Sie source /etc/profileIhren .bashrc- Pfad hinzufügen .

Keith Bentrup
quelle
Danke für den Tipp! Ich habe genau nach der lösung mit ssh gesucht. svn + ssh konnte den Befehl svnserve nicht finden, da der Pfad zu svnserve sich in .profile befand, jedoch nicht in .bashrc.
KIR
2

Es kann definiert werden in:

  • Systemvariablen - /etc/paths
  • Benutzervariablen - siehe @Steve Follys Erklärung
Ericn
quelle
1

Tatsächlich wird es in Ihrer .profileDatei gespeichert, .bash_loginund es ist üblich, dass MacPorts dies anstelle der .bash_loginDatei verwendet.

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

Ricbax
quelle
1

In Bezug auf das Hilfsprogramm docs/usr/libexec/path_helper wurden die Anfangskomponenten für $ PATH übernommen /etc/pathsund sehen standardmäßig so aus

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

für OS-X Snow Leopard

AB
quelle