Es sieht so aus, als würde die launchd.conf
Umgebungsvariable nicht mehr geladen. Hat das noch jemand bemerkt?
Gibt es eine andere Lösung, um Umgebungsvariablen dauerhaft festzulegen?
Es sieht so aus, als würde die launchd.conf
Umgebungsvariable nicht mehr geladen. Hat das noch jemand bemerkt?
Gibt es eine andere Lösung, um Umgebungsvariablen dauerhaft festzulegen?
Antworten:
Erstellen Sie eine
environment.plist
Datei~/Library/LaunchAgents/
mit diesem Inhalt:Sie können
launchctl
dem<string></string>
Block viele Befehle hinzufügen .Das
plist
wird nach dem Neustart des Systems aktiviert. Sie können es auch verwendenlaunchctl load ~/Library/LaunchAgents/environment.plist
, um es sofort zu starten.[Bearbeiten]
Die gleiche Lösung funktioniert auch in El Capitan.
Xcode 7.0+ wertet Umgebungsvariablen standardmäßig nicht aus. Das alte Verhalten kann mit diesem Befehl aktiviert werden:
defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO
[Bearbeiten]
Es gibt einige Situationen, in denen dies nicht ganz funktioniert. Wenn der Computer neu gestartet wird und "Fenster beim erneuten Anmelden erneut öffnen" ausgewählt ist, werden die Variablen in den erneut geöffneten Fenstern möglicherweise nicht angezeigt (möglicherweise werden sie geöffnet, bevor der Agent ausgeführt wird). Wenn Sie sich über ssh anmelden, werden die Variablen nicht festgelegt (Sie müssen sie daher in ~ / .bash_profile festlegen). Schließlich scheint dies für PATH auf El Capitan und Sierra nicht zu funktionieren. Dies muss über 'launchctl config user path ...' und in / etc / path eingestellt werden.
quelle
UseSanitizedBuildSystemEnvironment
) genau neunmal angezeigt wird .[ Ursprüngliche Antwort ]: Sie können weiterhin
launchctl setenv variablename value
eine Variable festlegen, die von allen Anwendungen erfasst wird (grafische Anwendungen, die über das Dock oder Spotlight gestartet wurden, zusätzlich zu denen, die über das Terminal gestartet wurden).Natürlich möchten Sie dies nicht jedes Mal tun, wenn Sie sich anmelden.
[ Bearbeiten ]: Um dies zu vermeiden, starten Sie
AppleScript Editor
und geben Sie einen Befehl wie den folgenden ein:(Verwenden Sie mehrere Zeilen, wenn Sie mehrere Variablen festlegen möchten.)
Speichern Sie nun (
⌘
+s
) als Dateiformat: Anwendung . Öffnen Sie abschließendSystem Settings
→ Benutzer & Gruppen → Anmeldeelemente und fügen Sie Ihre neue Anwendung hinzu.[ Ursprüngliche Antwort ]: Um diesen Ort zu umgehen, platzieren Sie alle Variablen, die Sie in einem kurzen Shell-Skript definieren möchten. Schauen Sie sich dann diese vorherige Antwort an, wie Sie ein Skript unter MacOS-Login ausführen . Auf diese Weise wird das Skript aufgerufen, wenn sich der Benutzer anmeldet.
[ Bearbeiten ]: Keine der beiden Lösungen ist perfekt, da die Variablen nur für diesen bestimmten Benutzer festgelegt werden, aber ich hoffe / vermute, dass dies alles ist, was Sie benötigen.
Wenn Sie mehrere Benutzer haben, können Sie entweder manuell ein Anmeldeelement für jeden von ihnen festlegen oder eine Kopie von com.user.loginscript.plist in jeder ihrer lokalen Bibliotheken / LaunchAgents ablegen Verzeichnisse und auf dasselbe Shell-Skript verweisen.
Zugegeben, keine dieser Problemumgehungen ist so praktisch wie /etc/launchd.conf .
[ Weitere Bearbeitung ]: Ein Benutzer unten erwähnt, dass dies bei ihm nicht funktioniert hat. Ich habe jedoch auf mehreren Yosemite-Computern getestet und es funktioniert für mich. Wenn Sie ein Problem haben, denken Sie daran, dass Sie Anwendungen neu starten müssen, damit dies wirksam wird. Wenn Sie Variablen im Terminal über ~ / .profile oder ~ / .bash_profile festlegen , überschreiben sie außerdem die über launchctl setenv festgelegten Elemente für Anwendungen, die über die Shell gestartet wurden .
quelle
Unter Mac OS X 10.10 Yosemite können Umgebungsvariablen mit 3 Dateien + 2 Befehlen festgelegt werden.
Hauptdatei mit Definition der Umgebungsvariablen:
Dienstdefinition zum Laden von Umgebungsvariablen für Benutzeranwendungen (Terminal, IDE, ...):
Dieselbe Dienstdefinition für Root-Benutzeranwendungen:
Und schließlich sollten wir diese Dienste registrieren:
Was wir bekommen:
Probleme / Probleme:
Damit Ihre env-Variablen nach dem Neustart des Systems von den Anwendungen korrekt übernommen wurden, benötigen Sie:
Dies liegt daran, dass Apple die explizite Bestellung geladener Dienste verweigert, sodass env-Variablen parallel zur Verarbeitung der "Wiedereröffnungswarteschlange" registriert werden.
Tatsächlich starte ich mein System jedoch nur mehrmals pro Jahr neu (bei großen Updates), es ist also keine große Sache.
quelle
JAVA_HOME
), aber nicht für diePATH
Variable (siehe meine Frage auf anders stellen ).launchd
, aber wäre es nicht möglich, diese Daemons beim Booten (dh vor dem Anmelden) zu laden? Das sollte alle von Ihnen erwähnten Probleme umgehen.Zitiert von
Apple Developer Relations 10-Oct-2014 09:12 PM
Lösung:
quelle
/Library/LaunchDaemons
, und anstatt zu sagenlaunchctl
, dass derlimit
Befehl ausgeführt werden soll, weisen Sie ihn an, densetenv
Befehl mitPATH
und einer Pfadzeichenfolge als Argumente auszuführen .launchd
sollte es beim Start automatisch abholen und sich fast sofort selbst modifizieren.<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
Hier sind die Befehle zum Wiederherstellen des alten Verhaltens:
Jetzt können Sie Befehle wie
setenv JAVA_HOME /Library/Java/Home
in angeben/etc/launchd.conf
.Auf El Capitan überprüft.
quelle
Was hat bei mir funktioniert (inspiriert von Aax 'Dank):
Fügen Sie dies in /Library/LaunchDaemons/com.apple.launchd.limit.plist ein und starten Sie es neu:
Wenn Sie es Schritt für Schritt brauchen:
⌘+v
) ein. Dadurch wird das Limit auf 16384 Dateien pro Prozess und insgesamt 16384 Dateien erzwungenesc
dann:wq
Ich hoffe das hat dir geholfen.
quelle
Sie können https://github.com/ersiner/osx-env-sync ausprobieren. Es verarbeitet sowohl Befehlszeilen- als auch GUI-Apps aus einer Hand und funktioniert mit der neuesten Version von OS X (Yosemite).
Sie können Pfadsubstitutionen und andere Shell-Tricks verwenden, da Sie ein reguläres Bash-Skript schreiben, das in erster Linie von Bash bezogen wird. Keine Einschränkungen. (Überprüfen Sie die Dokumentation zu osx-env-sync und Sie werden verstehen, wie dies erreicht wird.)
Ich habe hier eine ähnliche Frage beantwortet , wo Sie mehr finden.
quelle
Die Lösung besteht darin, Ihre Variable hinzuzufügen
/etc/profile
. Dann funktioniert alles wie erwartet! Natürlich MÜSSEN Sie dies als Root-Benutzer mit sudo nano / etc / profile tun. Wenn Sie es auf andere Weise bearbeiten, beschwert sich das System mit einem beschädigten / etc / profile, selbst wenn Sie die Berechtigungen in root ändern.quelle
Ich habe die Variablen im ~ / .bash_profile folgendermaßen hinzugefügt. Nachdem Sie fertig sind, starten Sie neu / melden Sie sich ab und melden Sie sich an
HINWEIS: Ohne Neustart / Abmelden und Anmelden können Sie diese Änderungen mit anwenden.
quelle