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


Ich tippe echo $PATH auf der Kommandozeile und erhalten

/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 das seit meinem .bash_login Die Datei ist leer.

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

Aktualisieren: Dank an Jtimberman zur Korrektur meiner echo $PATH Erklärung


132
2017-11-11 18:48


Ursprung


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. - Sathya♦
@Sathya, Es scheint mir /etc/paths.d ist nützlich für Installationsskripts. Wenn ich möchte, dass mein Installationsskript das installierte Programm dem Pfad hinzufügt, kann ich eine Datei in das Verzeichnis einfügen /etc/paths.d. Wenn ich den Pfad manuell bearbeiten möchte, /etc/paths ist eine bessere Option. - haydenmuhl
Ich habe ein Skript erstellt, das hauptsächlich auf diesem Post basiert und schnell ausgibt, wo der PATH an diesen verschiedenen Orten definiert ist: gist.github.com/lopespm/6407349952bc8a1ff8fb - Pedro Lopes


Antworten:


Wann bash startet es liest die folgenden Dateien jedes Mal, wenn Sie sich einloggen. Für OS X bedeutet dies jedes Mal, wenn Sie ein neues öffnen Terminal Fenster.

/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 beginnen bash In der Befehlszeile wird es gelesen .bashrc

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

Endlich, /etc/paths und /etc/paths.d werden auch von der Shell gelesen.


/opt/local/bin usw. werden hinzugefügt ~/.tcshrc von MacPorts. Schau auch mal rein ~/.cshrc.


152
2017-11-11 20:57



Anscheinend, ~/.MacOSX/environment.plist funktioniert nicht für manche Leute. Im Ändern Sie den Pfad für OS X eine Alternative mit dem Ordner /etc/paths.d wird beschrieben. Ich habe das nicht getestet. - Arjan
+1 für ~/.cshrc. Ging Nüsse, die versuchen herauszufinden, warum ~/.profile hat nicht funktioniert. - tomlogic
Ich denke, diese Antwort ist unvollständig. Ich versuche herauszufinden, wo ein fehlerhafter (nicht existierender) Pfad ist: / usr / bin / local, über den sich meine Shell beschwert und der sich in keiner dieser Dateien befindet. - Tommy
Ich denke .bashrc wird gelesen, unabhängig davon, ob Sie tippen bash oder nicht. - Xiao Peng - ZenUML.com


Schau dir die Datei an /etc/paths, die von verwendet wird /usr/libexec/path_helper, die von verwendet wird /etc/profile.

Für MacPorts verwenden sudo /etc/paths/opt/local/bin und öffnen Sie das Terminalfenster erneut.


47
2017-12-30 20:31





Im Ernst, Leopard hat uns eine neue Möglichkeit gegeben, Pfad hinzuzufügen. Erstellen Sie einfach eine Datei mit dem Pfadteil, 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 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 mehr Details:

ars technica: Wie füge ich PATH im Schneeleoparden etwas hinzu?

Zu einer zweiten Anmerkung: MacPorts legt alles in das opt Verzeichnis, weil es nicht von Apples Sachen benutzt wird. Auf diese Weise wird es nicht in Konflikt geraten. Ihr Führer (ausgezeichnet geschrieben, BTW) hat eine Erklärung, warum es opt verwendet und wie man diesen Standard ändert, wenn Sie möchten.

MacPorts Handbuch


25
2018-03-25 18:07



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. - Sathya♦
Einzellinie, kein Anhängen an Dateien und einfaches Entfernen. Liebe das. Danke Leanne - Ibrahim Lawal


Um deinen Pfad anzuzeigen, echo $ PATH.

echo $PATH

Um den Pfad festzulegen, bearbeiten Sie ~/.bash_profilenicht ~/.bash_login.


4
2017-11-11 19:07





Es gibt auch den Weg, wie von bestimmt ssh.

Vergleichen echo $PATH zu ssh localhost 'echo $PATH'. Da ssh nicht / etc / profile liest, läuft / usr / libexec / path_helper nicht und daher wird / etc / paths übersprungen. Jetzt versuche es ssh localhost 'source /etc/profile; echo $PATH'. Die Wege sollten näher sein. Die verbleibenden Unterschiede sind wahrscheinlich auf eine Pfadänderung in Ihrem .bash_profile (welches auch von ssh übersprungen wird) und .bashrc (welches von ssh gelesen wird) zurückzuführen.

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


3
2018-02-07 19:36



Danke für den Tipp! Ich suchte genau nach der Lösung mit ssh. svn + ssh konnte den Befehl svnserve nicht genau finden, weil der Pfad zu svnserve in .profile war, aber nicht in .bashrc. - KIR


Es könnte in entweder definiert werden:

  • Systemvariablen - /etc/paths
  • Benutzervariablen - siehe @Steve Folly's Erklärung

2
2018-06-01 09:50





Tatsächlich ist es in Ihrem gespeichert .profile Datei statt .bash_login und es ist üblich, dass MacPorts dies anstelle der verwenden wird .bash_login Datei.

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


1
2017-11-11 19:13





Bezüglich Dokumente zum /usr/libexec/path_helper Dienstprogramm, erste Komponenten für $ PATH wurde entnommen /etc/pathsund sieht standardmäßig so aus

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

für OS-X Snow Leopard


1
2018-06-26 01:40