Frage Wie lege ich die globale PATH-Umgebungsvariable unter OS X fest?


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

Ich weiß, dass ich den Pfad in Shell-Start-Skripten anhängen kann, aber diese Einstellungen werden nicht von GUI-Anwendungen geerbt.

Die einzige Möglichkeit, die ich bisher gefunden habe, ist die Definition der PATH - Umgebungsvariablen in /etc/launchd.conf:

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

Ich konnte nicht herausfinden, wie ich PATH tatsächlich anhängen könnte launchd.conf.

Ich mache mir ein bisschen Sorgen über diese Methode, aber bisher funktioniert das nur. Gibt es einen besseren Weg?


97
2018-05-31 19:08


Ursprung


Sehen: stackoverflow.com/questions/347286 - rjmunro
Für Yosemite und später, siehe stackoverflow.com/questions/25385934/... - thSoft
Keine der Antworten hier beantwortet die Frage des OP. Aber der Kommentar hier von thSoft steht direkt auf dem Geld! Vielleicht sollte dies mit der referenzierten Frage zusammengeführt oder verknüpft werden: stackoverflow.com/questions/25385934/... - Kevin Buchs


Antworten:


palmer's GUI Information ist richtig, aber es gibt eine aufrechterhaltbare Möglichkeit, den von der Shell gesehenen Pfad zu ändern. Mögen Mediaslave sagte, können Sie bearbeiten /etc/paths, aber noch besser können Sie eine Textdatei einfügen /etc/paths.d/ das hat einen Pfad darin und alle Shells werden den Pfad korrekt aufbauen.

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

70
2018-05-28 06:53



Nett, danke! Hinweis: Dies erfordert, dass Sie sich abmelden und erneut anmelden, bevor es funktioniert. - weronika
@weronika: Ich fand, es war ausreichend zu beenden und neu zu starten X11 (weniger schmerzhaft als vollständig abmelden). Ich habe es nicht versucht Terminal. - Peter Gluck
Ich habe mich auf Terminal bezogen - Sie haben recht, ich habe vergessen anzugeben. - weronika
Dies ist gut zu wissen, aber es beantwortet nicht die Frage des OP, da dieser Mechanismus nicht für GUI-Apps gilt. Der OP suchte nach einem einheitlich Lösung, die es ihm erlaubt anhängen zum Standard $PATH. - mklement
was meinst du mit "mein system" hier, @cogg? Verwenden wir nicht alle OS X hier? Tut mir leid, aber ich bin immer noch neu in OS X. Ich benutze OS X 10.7 - ericn


/etc/launchd.conf

Das launchd.conf file ist ** die einzige Komplettlösung, die sowohl für Kommandozeilen- als auch für GUI-Anwendungen funktioniert OS X 10.8 (Berglöwe) und v10.9 (Mavericks), einer, der mit GUI- und Konsolenanwendungen für alle Benutzer 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 hinzugefügt /usr/local/bin zu den Standardumgebungswerten für PATH.

Beachten Sie, dass diese Datei kein Skript ist und Sie keine Substitutionen verwenden können. Um diese anwenden zu können, müssen Sie einen Neustart durchführen.

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

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

Diese Antwort basiert auf der gleichen Frage von Festlegen von Umgebungsvariablen unter Mac OS X.


47
2018-06-04 20:30



Tolles Ergebnis, aber die Frage spricht schon gestartet und fragt nach, wie anhängen zu dem Pfad darin. - cregox
Haben Sie der ursprünglichen Frage, die auf sich selbst als "die richtige Antwort" hinweist, wirklich einen Kommentar hinzugefügt? - TJ Luoma
Es ist impliziert durch Ihre - hilfreich - Antwort, aber nur um es auszudrücken: der Wunsch des OP zu anhängen Der Standardpfad 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 von / etc / paths und /etc/paths.d/ neu erstellt. - Dave X
gemäß apple.stackexchange.com/questions/106355/ ..., das funktioniert nicht lange für Yosemite oder später - ericn


Sie müssen es auf einer Shell-für-Shell-Basis setzen; Bash- und Csh-artige Shells teilen nicht dieselben Konfigurationsdateien und dieselbe Syntax zum Anpassen des PATH.

Versuche dies zu tun launchctl funktioniert nicht, weil bei der Anmeldung die Umgebungsvariablen gesetzt werden; Sie existieren nicht systemweit in Unix außerhalb einer Shell-Sitzung.

Du wirst also hinzufügen wollen

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

zu /etc/csh.cshrc und

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

zu /etc/bashrc.

Wenn Sie Umgebungsvariablen in GUI-Anwendungen wünschen, ist das komplizierter. Sie müssen ein erstellen .MacOSX/environment.plist Datei im Home-Verzeichnis jedes Benutzers. Das .MacOSX Verzeichnis wird wahrscheinlich nicht standardmäßig vorhanden sein, also müssen Sie es erstellen.

Das Format der Datei ist so:

<?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>

Mehr über die environment.plist  ist auf Apples Website.


7
2018-06-01 12:24



Aber die Einstellungen werden wirksam, wenn sie in /etc/launchd.conf gesetzt werden ... Hmmm ... / ich bin verwirrt. - Xerxes
"Ja wirklich?" Welche Umgebungsvariable setzen Sie dort? - palmer
Nur ein Update ab OS X 10.8: Das ~/.MacOSX/environment.plist Ansatz wird nicht mehr unterstützt und es gibt keinen Ersatz auf der Benutzerebene. Systemweit können Sie verwenden /etc/launchd.conf(Und es gibt eine per - *. App-Lösung). - mklement
Beantwortet nicht die Fragen von OP. - Kevin Buchs


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

sudo nano /etc/paths sollte dich dahin bringen.


3
2017-09-03 18:04



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


Haben Sie sich die Manpage für die path_helper Befehlszeilenprogramm unter OS X? Ich antwortete a etwas verwandte Frage zu SO Ich denke, dass Sie hilfreich finden können.


1
2018-06-01 12:50





Ich bin mir nicht sicher, ob jemand darüber berichtet hat das einfachste und die meisten elegant Weg. Zumindest auf Mac OS X 10.6 (Schneeleopard).

Verarschend mit dem [/etc/|~/.] von [profile|bashrc] Dateien können funktionieren, aber es ist ein bisschen ein Hack. Das /etc/paths.d/ Verzeichnis ist der Weg zu gehen:

  • Sudo in deinen Lieblingsherausgeber.
  • Erstellen Sie eine neue Datei namens *name* (Nenne es einfach nicht, was schon da drin 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 profile oder bashrcund du solltest gut gehen.


1
2018-01-31 07:22



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


Ich bin mir nicht sicher, ob Launchd das akzeptiert, aber versuchen Sie:

setenv PFAD "$ PATH: / mein / Pfad"

0
2018-05-31 19:26



Das klappt leider nicht. Es sieht nicht so aus, als hätte launchctl so einfachen Zugriff auf Umgebungsvariablen. Es gibt einen Befehl, um Umgebungsvariablen zu bekommen, aber es gibt absolut keine Dokumentation darüber, wie man sie benutzt. - lajos


Ich bin mir nicht sicher, warum du es benutzen würdest /etc/launchd.conf im Gegensatz zu /etc/profile - aber ich bin kein Experte in Mac OS X - ich glaube dir, dass ich sicher bin, dass es funktioniert, aber launchd ist die Mac OS X Implementierung / Ersatz für init - Mac OS X verwirrt mich.

Sowieso, setenv PATH "$PATH:/more/paths:/and/more/paths" wird funktionieren (tcsh), und das Bourn Shell-Äquivalent ist export PATH="$PATH:/more/paths:/and/more/paths" - Ich habe keine Ahnung wie launchd bezieht sich auch auf eine bestimmte Shell.

Ich denke, ich habe mehr Fragen gestellt, dann habe ich geantwortet =)


0
2018-06-01 04:10



Die Einstellungen für / etc / profile path 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
Richtig - danke, dass du das für mich erledigt hast :) - Xerxes
Unix? Sicher, 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