Wo werden in Mountain Lion Systemumgebungsvariablen festgelegt?

46

In Lion (und früheren Versionen) war es in .MacOSX/environment.plist. Nach dem Upgrade auf 10.8 ist die Datei noch vorhanden, die Variablen können jedoch nicht verwendet werden.

Ich habe auch versucht, sie hinzuzufügen /etc/launchd.confund sie werden im Terminal angezeigt, aber nicht in GUI-Anwendungen (wie meiner IDE).

Felix
quelle
Haben Sie nach dem Wechsel einen Neustart durchgeführt /etc/launchd.conf?
Nohillside
Das habe ich getan, und alle darin enthaltenen Variablen sind jetzt in jedem Terminal verfügbar, für meine IDE jedoch nicht vorhanden.
Felix
Möglicherweise setzt die IDE die Umgebung nicht für Sie aus (siehe meine Antwort )? Um welche IDE handelt es sich? Wird es direkt vom Finder oder Spotlight gestartet?
Halloleo

Antworten:

22

Ich habe diese Frage auch in den Apple Developer Forums gestellt und diese offizielle Antwort erhalten.

Ändern Sie die Info.plist der .app selbst so, dass sie ein "LSEnvironment" -Wörterbuch mit den gewünschten Umgebungsvariablen enthält.
~ / .MacOSX / environment.plist wird nicht mehr unterstützt.

Felix
quelle
2
Wo befindet sich das?
orome
Es wäre nützlich, einen Link zu einem spezifischeren Beispiel bereitzustellen.
Blaisorblade
1
Update: Ich habe versucht, diese Datei zu ändern, nachdem ich die Syntax herausgefunden habe (glaube ich), aber es funktioniert überhaupt nicht für mich.
Blaisorblade
4
Pro Anwendung gibt es eine Info.plist in WhatEver.app/Content/Info.plist. Sie können es mit XCode bearbeiten. Klicken Sie in der Informationseigenschaftsliste auf "+" und fügen Sie ein Wörterbuch mit dem Namen "LSEnvironment" hinzu. Wenn Sie es richtig eingeben, wird es in Umgebungsvariablen umbenannt. Dann klicken Sie für jede Umgebungsvariable, die Sie hinzufügen möchten, auf das "+".
Felix
2
Dies ist eine schöne Lösung, die jedoch ab Yosemite 10.10.5 nicht mehr funktioniert.
Dalmazio
21

Ich weiß, dass dies eine alte Frage ist, aber ich dachte, ich würde darauf hinweisen, dass in Yosemite /etc/launchd.confnicht mehr funktioniert (wie von der Manpage bestätigt). Also hier ist eine Alternative.

Starten Sie den AppleScript Editor und geben Sie einen Befehl wie den folgenden ein:

do shell script "launchctl setenv variablename value"

(fügen Sie so viele Zeilen hinzu, wie Sie möchten)

Jetzt speichern (⌘S) als Dateiformat: Anwendung . Öffnen Sie schließlich SystemeinstellungenBenutzer & GruppenAnmeldeelemente und fügen Sie Ihre neue Anwendung hinzu.

ruario
quelle
Beachten Sie, dass dies möglicherweise nicht mit anderen Apps funktioniert, die als
Anmeldeelemente
Das hat bei mir funktioniert. Ich danke dir sehr. Das hat den ganzen Tag verrückt gemacht!
ganztägig
2
Sieht aus wie die einzige echte und universelle Lösung, die es bisher gibt. Aber es braucht noch 9 Upvotes, um die erste Antwort zu bekommen. : c
Sarge Borsch
Bei El Capitan hat das geklappt. Wie oben von @Mark bemerkt, gibt es Probleme mit der Bestellung (z. B. können wiederaufgenommene Anwendungen die Umgebung haben oder nicht), aber sobald sie angemeldet sind, funktioniert dies wie erwartet. Das heißt, Anwendungen, die über Spotlight oder das Dock gestartet wurden, verfügen über die richtige Umgebung.
Alec Thomas
@Mark Sie können diese Antwort mit dem Launch Agent ausprobieren . In meinem Fall wird der Launch Agent nach den Anmeldeelementen gestartet. Daher verschiebe ich die Zielanwendung (wie Eclipse) von Anmeldeelement nach Launch Agent, damit sie nach den Umgebungsvariablen für diese spezielle Anwendungseinstellung gestartet werden.
Franklin Yu
10

Wie Sie festgestellt haben, wird die Verwendung der Datei environment.plist nicht mehr befolgt. Die in Info.plist als LSEnvironment- Zeichenfolgen gespeicherten Variablen werden nur von launchd festgelegt .

Sie können sich nicht darauf verlassen, dass sie eine allgemeine Umgebungsvariable festlegen, die das Terminal festlegt, wenn Sie Ihr Programm direkt vom Terminal / der Shell aus aufrufen. Die gute Nachricht ist, dass der open -aBefehl launchd für den Start auslöst, sodass die Variablen für die App-Umgebung konsistent festgelegt werden, wenn nicht für die lokale Shell-Umgebung.

bmike
quelle
4

Das Festlegen von Umgebungsvariablen /etc/launchd.confist der richtige Weg: Jede Anwendung, die nach einem Neustart über lokale Shells, Finder oder Spotlight gestartet wird , erbt diese Variablen - ich habe dies ausführlich mit Mountain Lion 10.8.3 getestet.

2 Vorbehalte:

halloleo
quelle
1
/etc/launchd.confwird seit Yosemite nicht mehr unterstützt. Siehe apple.stackexchange.com/questions/106355/…
Franklin Yu
3

Versuchen Sie es launchctl setenv NAME VALUE. Ich weiß nicht, ob / was es anders macht als das Bearbeiten von launchd.conf, aber es funktioniert sowohl in Terminal- als auch in GUI-Apps. Mehr Details.

Beachten Sie, dass dies nach einem Neustart nicht überlebt. Hier ist eine Möglichkeit, das zu beheben .

Ryan
quelle
3
Das ist eine ziemlich lange Seite, auf die Sie hier verlinken. Wo genau ist das relevante Teil? Könnten Sie es direkt in Ihre Antwort aufnehmen, um es für alle einfacher zu machen?
Nohillside
2
Hoppla, guter Punkt, dachte ich hätte eher ein Fragment in diese URL aufgenommen. Fest.
Ryan
1
Die Möglichkeit, über einen Neustart hinweg zu überleben, besteht in der
Datei