Wie setze ich die globale Umgebungsvariable PATH unter OS X?

101

Ich möchte an die globale Umgebungsvariable PATH unter OS X anhängen, damit alle Benutzer-Shells und GUI-Anwendungen dieselbe PATH-Umgebung erhalten.

Ich weiß, dass ich in Shell-Startskripten an den Pfad anhängen kann, aber diese Einstellungen werden nicht von GUI-Anwendungen übernommen.

Die einzige Möglichkeit, die ich bisher gefunden habe, besteht darin, die Umgebungsvariable PATH in /etc/launchd.conf neu zu definieren :

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

Ich konnte keinen Weg finden, um tatsächlich an PATH anzuhängen launchd.conf.

Ich bin ein bisschen besorgt über diese Methode, aber bisher ist dies das einzige, was funktioniert. Gibt es einen besseren Weg?

lajos
quelle
2
Informationen zu
thSoft
Keine der Antworten hier befasst sich mit der Frage des OP. Aber der Kommentar hier von thSoft ist genau das Richtige fürs Geld! Vielleicht sollte dies zusammengeführt oder mit der Frage verknüpft werden, auf die verwiesen wird: stackoverflow.com/questions/25385934/…
Kevin Buchs

Antworten:

71

Die GUI-Informationen von palmer sind korrekt, aber es gibt eine wartbarere Möglichkeit, den von der Shell angezeigten Pfad zu ändern. Wie Mediaslave sagte , können Sie bearbeiten /etc/paths, aber noch besser können Sie eine Textdatei /etc/paths.d/mit einem Pfad darin ablegen , und alle Shells werden den Pfad korrekt konstruieren.

Zum Beispiel auf meinem System:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin
Zahnrad
quelle
1
Nett, danke! Hinweis: Hierfür müssen Sie sich abmelden und erneut anmelden, bevor es funktioniert.
Weronika
@weronika: Ich fand es ausreichend, zu beenden und neu zu starten X11(weniger schmerzhaft als sich komplett abzumelden ). Ich habe es nicht ausprobiert Terminal.
Peter Gluck
Ich bezog mich auf Terminal - Sie haben Recht, ich habe vergessen, anzugeben.
Weronika
8
Dies ist gut zu wissen, aber es beantwortet NICHT die Frage des OP, da dieser Mechanismus nicht für GUI-Apps gilt. Das OP suchte nach einer einheitlichen Lösung, die es ihm ermöglicht, an die Standardeinstellung anzuhängen$PATH .
mklement
was meinst du mit "mein system" hier, @cogg? Verwenden wir hier nicht alle OS X? Entschuldigung, aber ich bin noch neu in OS X. Ich verwende OS X 10.7
ericn
48

/etc/launchd.conf

Die launchd.confDatei ist ** die einzige Komplettlösung , die für alle Benutzer sowohl für Befehlszeilen- als auch für GUI-Anwendungen unter OS X 10.8 (Mountain Lion) und 10.9 (Mavericks) funktioniert .

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

Hinzufügen

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

Im obigen Beispiel habe ich /usr/local/bindie Standardumgebungswerte für PATH hinzugefügt .

Beachten Sie, dass es sich bei dieser Datei nicht um ein Skript handelt und Sie nicht die Möglichkeit haben, Ersetzungen zu verwenden. Damit diese angewendet werden, muss der Computer neu gestartet werden.

Denken Sie daran, alle anderen sind nur Teillösungen:

  • environment.plist funktioniert nicht für Anwendungen, die über Spotlight gestartet wurden.
  • /etc/paths - nur für Konsole
  • /etc/csh.cshrcoder /etc/bashrc- nur für einige Muscheln

Diese Antwort beruht auf der gleichen Frage Umgebung einstellen Variablen auf Mac OS X .

Sorin
quelle
7
Tolles Ergebnis, aber die Frage spricht bereits über launchd und fragt, wie der Pfad darin angehängt werden soll .
Cregox
21
Haben Sie der ursprünglichen Frage wirklich einen Kommentar hinzugefügt, der auf sich selbst als "echte Antwort" verweist?
TJ Luoma
7
Dies wird durch Ihre - hilfreiche - Antwort impliziert, aber nur um es auszudrücken: Der Wunsch des OP, an den Standardpfad anzuhängen , wird nicht unterstützt, da Sie nicht auf andere Umgebungsvariablen in verweisen können /etc/launchd.conf.
mklement
Es ist nicht global - die Befehlszeilenumgebung verwirft dies, wenn / etc / profile path_helper aufruft und PATH aus / etc / arrows und /etc/paths.d/ wiederherstellt
Dave X
1
Laut apple.stackexchange.com/questions/106355/… funktioniert dies nicht mehr für Yosemite oder später
ericn
7

Sie müssen es Shell für Shell einstellen. Bash- und csh-ähnliche Shells verwenden nicht dieselbe Konfigurationsdatei und Syntax zum Anpassen von PATH.

Der Versuch, dies zu tun, launchctlfunktioniert nicht, da Umgebungsvariablen beim Anmelden festgelegt werden. Sie existieren in Unix nicht systemweit außerhalb einer Shell-Sitzung.

Also wirst du hinzufügen wollen

setenv PATH "$PATH:/add/my/extra/path"

zu /etc/csh.cshrcund

export PATH="$PATH:/more/paths:/

zu /etc/bashrc.

Wenn Sie Umgebungsvariablen in GUI-Anwendungen verwenden möchten, ist dies komplizierter. Sie müssen eine .MacOSX/environment.plistDatei im Home-Verzeichnis jedes Benutzers erstellen . Das .MacOSXVerzeichnis wird wahrscheinlich nicht standardmäßig vorhanden sein, daher müssen Sie es erstellen.

Das Format der Datei ist wie folgt:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

Weitere Informationen finden Sie auf der environment.plist Apple-Website .

palmer
quelle
Die Einstellungen werden jedoch wirksam, wenn sie in /etc/launchd.conf ... Hmmm ... / me festgelegt werden.
Xerxes
"Ja wirklich?" Welche Umgebungsvariable setzen Sie dort?
Palmer
1
Nur ein Update ab OS X 10.8: Der ~/.MacOSX/environment.plistAnsatz wird nicht mehr unterstützt und auf Benutzerebene gibt es keinen Ersatz. Systemweit können Sie /etc/launchd.conf(und es gibt eine pro - *. App-Lösung) verwenden.
mklement
Beantwortet die Fragen von OP nicht.
Kevin Buchs
3

Sie können Ihren globalen Pfad bearbeiten, indem Sie Zeilen zu /etc/pathseinem Pfad pro Zeile hinzufügen .

sudo nano /etc/paths sollte dich dorthin bringen.

manumoomoo
quelle
2
Dies ist gut zu wissen, beantwortet jedoch nicht die Frage des OP, da dieser Mechanismus nicht für GUI-Apps gilt.
mklement
1

Haben Sie sich die Manpage für das path_helperBefehlszeilendienstprogramm unter OS X angesehen? Ich habe eine etwas verwandte Frage zu SO beantwortet , die Sie vielleicht hilfreich finden.

Ayaz
quelle
1

Ich bin mir nicht sicher, ob jemand die einfachste und eleganteste Art behandelt hat. Zumindest auf dem Mac OS X 10.6 (Snow Leopard).

Spielerisch mit dem [/etc/|~/.]von [profile|bashrc]Dateien arbeiten kann, aber es ist so etwas wie ein Hack. Das /etc/paths.d/Verzeichnis ist der richtige Weg:

  • Sudo in Ihren Lieblingseditor.
  • Erstellen Sie eine neue Datei mit dem Namen *name*(benennen Sie sie nur nicht mit einem Namen, der bereits vorhanden ist) /etc/paths.d/mit einem Pfad pro Zeile:

    /usr/X11/bin
    /Developer/usr/bin
    
  • Dann füge hinzu

    eval '/usr/libexec/path_helper -s`
    

    zu profileoder bashrc, und Sie sollten gut zu gehen sein.

noboomu
quelle
1
Dies ist gut zu wissen, beantwortet jedoch nicht die Frage des OP, da dieser Mechanismus nicht für GUI-Apps gilt.
mklement
Ist der Dateiname wörtlich *name*? Oder meinst du nur name?
Peter Mortensen
0

Ich bin nicht sicher, ob launchd dies akzeptiert, aber versuchen Sie Folgendes:

setenv PATH "$ PATH: / my / path"
Grawity
quelle
1
Das geht leider nicht. Es sieht nicht so aus, als hätte launchctl so einfach Zugriff auf Umgebungsvariablen. Es gibt einen Befehl zum Abrufen von Umgebungsvariablen, aber keine Dokumentation zur Verwendung.
lajos
0

Ich bin mir nicht sicher , warum Sie verwenden würde , /etc/launchd.confim Gegensatz /etc/profile- aber ich bin kein Experte in Mac OS X - Ich glaube , Sie, dass ich bin sicher , dass es funktioniert, aber launchdist die Mac OS X Implementierung / Ersatz für init- Mac OS X verwirrt mich.

Wie auch immer, setenv PATH "$PATH:/more/paths:/and/more/paths"wird funktionieren (tcsh), und das Äquivalent zur Bourn-Shell ist export PATH="$PATH:/more/paths:/and/more/paths"- ich habe auch keine Ahnung, wie launchdes mit einer bestimmten Shell zusammenhängt.

Ich glaube, ich habe mehr Fragen gestellt, als ich beantwortet habe =)

Xerxes
quelle
4
/ etc / profile-Pfadeinstellungen werden von keiner der OS X-GUI-Apps angezeigt. Das gilt nur für Bash. Ich möchte, dass alle Anwendungen die neue Pfadeinstellung erhalten.
lajos
1
Unix? Klar, es ist Unix. Ich meine, irgendwie. Ja, wir haben Sachen kaputt gemacht, die seit 30 Jahren funktionieren, aber es ist immer noch Unix! / Seufzer
Matt Simmons