Update: Der unten stehende Link hat keine vollständige Antwort . Das Festlegen des Pfads oder der Variablen an zwei Stellen (eine für die GUI und eine für die Shell) ist lahm.
Nicht doppelt vorhanden von : Festlegen von Umgebungsvariablen in OS X?
Ausgehend von einem Windows-Hintergrund, in dem es sehr einfach ist, Umgebungsvariablen festzulegen und zu ändern (gehen Sie einfach zu Systemeigenschaften> Erweitert> Umgebungsvariablen), scheint dies unter Mac OS 10.5 nicht so einfach zu sein. Die meisten Referenzen sagen, ich sollte / etc / profile oder ~ / .profile aktualisieren. Entsprechen diese Systemvariablen und Benutzervariablen? Wo soll ich zum Beispiel meine JAVA_HOME
Variable setzen?
BEARBEITEN:
Ich möchte sowohl über das Terminal als auch über eine App wie Eclipse auf die Variable zugreifen können. Außerdem hoffe ich, dass ich nicht neu starten / abmelden muss, damit dies wirksam wird.
quelle
Antworten:
Es ist keine Vervielfältigung erforderlich. Sie können Umgebungsvariablen festlegen, die von launchd (und untergeordneten Prozessen, dh alles, was Sie von Spotlight aus starten) verwendet werden
launchctl setenv
.Wenn Sie beispielsweise Ihren aktuellen Pfad in launchd spiegeln möchten, nachdem Sie ihn in
.bashrc
oder wo auch immer eingerichtet haben:Umgebungsvariablen werden in laufenden Anwendungen nicht automatisch aktualisiert. Sie müssen Anwendungen neu starten, um die aktualisierten Umgebungsvariablen zu erhalten (obwohl Sie nur Variablen in Ihrer Shell festlegen können, z
PATH=whatever:you:want
. B. das Terminal muss nicht neu gestartet werden).quelle
launchctl setenv
scheinen nur für den Benutzer sichtbar zu sein, der die Änderung vornimmt . Wenn ich eine Variable als normaler Benutzer festlege, ist sie für root (über sudo) nicht sichtbar und umgekehrt.ps aux | grep launchd
wird dies zeigen. Überprüfen Sie auchman sudo
, welche Dokumentesudo
(standardmäßig) die Umgebung absichtlich zurücksetzen - wenn Siesudo -E
die Umgebung (einschließlich der von Ihnen festgelegten Variablenlaunchctl setenv
) erhalten. Haben Sie übrigens eine aktuelle Bewerbung dafür? Wenn ja, funktioniert diese Methode für Sie?Es gibt mehrere Stellen, an denen Sie Umgebungsvariablen festlegen können.
~/.profile
: Verwenden Sie diese Option für Variablen, die Sie in allen vom Terminal gestarteten Programmen festlegen möchten (beachten Sie, dass im Gegensatz zu Linux alle in Terminal.app geöffneten Shells Login-Shells sind).~/.bashrc
: Dies wird für Shells aufgerufen, die keine Login-Shells sind. Verwenden Sie dies für Aliase und andere Dinge, die in Unterschalen neu definiert werden müssen, nicht für vererbte Umgebungsvariablen./etc/profile
: Dies wird vor ~ / .profile geladen, ist aber ansonsten gleichwertig. Verwenden Sie diese Option, wenn die Variable auf Terminalprogramme angewendet werden soll, die von allen Benutzern auf dem Computer gestartet wurden (vorausgesetzt, sie verwenden bash).~/.MacOSX/environment.plist
: Dies wird vom Login-Fenster beim Login gelesen. Dies gilt für alle Anwendungen, einschließlich der GUI-Anwendungen, mit Ausnahme derjenigen, die von Spotlight in 10.5 (nicht 10.6) gestartet wurden. Sie müssen sich abmelden und erneut anmelden, damit die Änderungen wirksam werden. Diese Datei wird ab OS X 10.8 nicht mehr unterstützt.launchd
Instanz Ihres Benutzers : Dies gilt für alle Programme, die vom Benutzer, der GUI und der CLI gestartet werden. Sie können Änderungen jederzeit mit demsetenv
Befehl in anwendenlaunchctl
. Theoretisch sollten Sie in der Lage sein,setenv
Befehle einzugeben~/.launchd.conf
undlaunchd
diese automatisch zu lesen, wenn sich der Benutzer anmeldet. In der Praxis wurde die Unterstützung für diese Datei jedoch nie implementiert. Stattdessen können Sie einen anderen Mechanismus verwenden, um ein Skript bei der Anmeldung auszuführen, und diesen Skriptaufruf ausführenlaunchctl
, um dielaunchd
Umgebung einzurichten ./etc/launchd.conf
: Dies wird von launchd gelesen, wenn das System gestartet wird und wenn sich ein Benutzer anmeldet. Sie wirken sich auf jeden einzelnen Prozess auf dem System aus, da launchd der Root-Prozess ist. Um Änderungen am laufenden Root-Start anzuwenden, können Sie die Befehle in weiterleitensudo launchctl
.Die grundlegenden Dinge zu verstehen sind:
launchctl
. Die aktualisierten Variablen werden dann von allen neuen Prozessen geerbt, die von da an gegabelt werden.Beispiel für das Festlegen einer Umgebungsvariablen mit launchd:
Starten Sie jetzt Ihre GUI-App, die die Variable verwendet, und voila!
Um die Tatsache zu umgehen, dass
~/.launchd.conf
umgehen dies nicht funktioniert, können Sie das folgende Skript einfügen~/Library/LaunchAgents/local.launchd.conf.plist
:Dann kannst du setzen
setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE
hineinstecken~/.launchd.conf
, und es wird bei jedem Login ausgeführt.Beachten Sie, dass Sie beim Weiterleiten einer Befehlsliste an launchctl auf diese Weise keine Umgebungsvariablen mit Werten festlegen können, die Leerzeichen enthalten. Wenn Sie dies benötigen, können Sie launchctl wie folgt aufrufen :
launchctl setenv MYVARIABLE "QUOTE THE STRING"
.Beachten Sie außerdem, dass andere Programme, die bei der Anmeldung ausgeführt werden, möglicherweise vor dem Startagenten ausgeführt werden und daher die von ihm festgelegten Umgebungsvariablen möglicherweise nicht sehen.
quelle
~/.MacOSX/environment.plist
auf meinem Lion es wird gelesen und verwendet. Habe es gerade getestet. Ich bevorzuge es tatsächlich gegenüber .launchd.conf, da ich das RCenvironment-Einstellungsfenster verwende , um es zu pflegen.~/.launchd.conf
mit 10.6.8 arbeiten - es scheint keine Auswirkungen zu haben. Außerdem sagt die Manpage, dass diese Datei derzeit nicht unterstützt wird.~/.launchd.conf
Könnten Sie es bitte aktualisieren, um festzustellen, dass es immer noch nicht unterstützt wird und ab OS X 10.8.3 nicht funktioniert? Sieheman launchd.conf
Ich denke, das OP sucht nach einer einfachen, Windows-ähnlichen Lösung.
hier gehts:
https://www.macupdate.com/app/mac/14617/rcenvironment
quelle
Sie können unter Linux nachlesen, was Mac OS X ziemlich nahe kommt. Oder Sie können sich über BSD Unix informieren, das etwas näher liegt. Die Unterschiede zwischen Linux und BSD sind größtenteils nicht groß.
/etc/profile
sind Systemumgebungsvariablen.~/.profile
sind benutzerspezifische Umgebungsvariablen."Wo soll ich meine JAVA_HOME-Variable setzen?"
/etc/profile
?Im Allgemeinen ziehe ich es vor, mich nicht mit systemweiten Einstellungen herumzuschlagen, obwohl ich der einzige Benutzer bin. Ich bevorzuge es, meine lokalen Einstellungen zu bearbeiten.
quelle
Für GUI-Apps müssen Sie erstellen und bearbeiten
~/.MacOSX/environment.plist
. Weitere Details hier . Sie müssen sich abmelden, damit diese wirksam werden. Ich bin nicht sicher, ob sie sich auch auf Anwendungen auswirken, die über das Terminal gestartet wurden, aber ich gehe davon aus, dass dies der Fall ist.Für Apps, die über Terminal gestartet werden, können Sie auch die Datei ~ / .profile bearbeiten.
quelle
Öffnen Sie einfach die
~/.profile
Datei übernano
in Terminal und geben Sie dort Folgendes ein:Speichern Sie diese Datei (cmd + X und Y). Danach melden Sie sich bitte erneut ab oder öffnen Sie einfach eine neue Registerkarte in Terminal und versuchen Sie, Ihre neue Variable zu verwenden.
BITTE vergessen Sie nicht, ": $ PATH" nach was auch immer / Sie / wollen hinzuzufügen, sonst löschen Sie alle Pfade in der PATH-Variablen, die vorher da waren.
quelle
Synchronisieren Sie OS X-Umgebungsvariablen für Befehlszeilen- und GUI-Anwendungen aus einer Hand mit osx-env-sync .
Ich stellte auch eine Antwort auf eine ähnliche Frage hier .
quelle
Wenn Sie Umgebungsvariablen unter macOS dauerhaft ändern möchten, legen Sie sie fest
/etc/paths
. Beachten Sie , dass diese Datei standardmäßig schreibgeschützt ist, sodass Sie für Schreibberechtigungen chmod benötigen .quelle
/usr/bin/local
in dieser Datei, auch ohne die Datei zu ändern, es war standardmäßig so, und dennoch sehen meine GUI-Apps nur/usr/bin:/bin:/usr/sbin:/sbin
. Ich habe viele Male neu gestartet.cat /etc/paths/
?Für Benutzer von Mac OS X Catalina 2020:
Vergessen Sie andere nutzlose Antworten, hier sind nur zwei Schritte erforderlich:
Erstellen Sie eine Datei mit der Namenskonvention: priority-appname. Kopieren Sie dann den Pfad, dem Sie hinzufügen möchten, und fügen Sie ihn ein
PATH
.ZB
80-vscode
mit Inhalten/Applications/Visual Studio Code.app/Contents/Resources/app/bin/
in meinem Fall.Verschieben Sie diese Datei nach
/etc/paths.d/
. Vergessen Sie nicht, eine neue Registerkarte (neue Sitzung) im Terminal zu öffnen und einzugebenecho $PATH
, um zu überprüfen, ob Ihr Pfad hinzugefügt wurde!Hinweis: Diese Methode hängt nur Ihren Pfad an
PATH
.quelle