Wie richtet man Umgebungsvariablen in Mac OS X so ein, dass sie für GUI-Anwendungen verfügbar sind, ohne ~ / .MacOSX / environment.plist oder Anmelde- Hooks zu verwenden (da diese veraltet sind )?
macos
environment-variables
launchd
launchctl
Percival Ulysses
quelle
quelle
Antworten:
Auf Mountain Lion hat all das
/etc/paths
und die/etc/launchd.conf
Bearbeitung keine Auswirkung!Apples Entwicklerforen sagen:
Also habe ich die App direkt bearbeitet
Info.plist
(Rechtsklick auf "AppName.app" (in diesem Fall SourceTree) und dann "Show package contents
")und fügte ein neues Schlüssel / Dikt-Paar hinzu:
(siehe: LaunchServicesKeys-Dokumentation bei Apple )
jetzt benutzt die App (in meinem Fall SourceTree) den angegebenen Pfad und arbeitet mit git 1.9.3 :-)
PS: Natürlich müssen Sie den Pfadeintrag an Ihre spezifischen Pfadanforderungen anpassen.
quelle
Info.plist
wirksam werden.Die Lösung nutzt die Funktionalität von
launchctl
, kombiniert mit einem Launch Agent , um die Anmelde-Hooks alter Zeiten nachzuahmen. Informationen zu anderen Lösungen, die den Store von verwendenlaunchd
, finden Sie in diesem Vergleich . Der hier verwendete Launch Agent befindet sich in / Library / LaunchAgents / :Eine wichtige Sache ist der RunAtLoad- Schlüssel, damit der Startagent zum frühestmöglichen Zeitpunkt ausgeführt wird. Die eigentliche Arbeit wird im Shell-Skript /Users/Shared/conflaunchd.sh erledigt , das ~ / .conf.launchd liest und an folgende Adresse weiterleitet
launchctl
:Beachten Sie den Aufruf von
path_helper
, um PATH richtig einzurichten. Schließlich sieht ~ / .conf.launchd so ausDies sind
launchctl
Befehle. Weitere Informationen finden Sie in der Manpage. Funktioniert gut für mich (ich sollte erwähnen, dass ich immer noch ein Snow Leopard-Typ bin), GUI-Anwendungen wie texstudio und TeXShop können meinen eigenen tex-Baum sehen. Dinge, die verbessert werden können:Das Shell-Skript enthält ein
#filename="$1"
. Dies ist kein Zufall, da der Dateiname vom Startagenten als Argument in das Skript eingegeben werden sollte, aber das funktioniert nicht.Wie hier erwähnt (deutsch und hinter einer Paywall!), Ist es möglich, das Skript selbst in den Launch Agent zu stellen.
Ich bin nicht sicher, wie sicher diese Lösung ist, da sie
eval
mit vom Benutzer bereitgestellten Zeichenfolgen verwendet wird.Ich denke daran zu erinnern, dass die Definition von MANPATH mit dieser Methode nicht gut funktioniert hat, aber ich bin mir nicht sicher.
Es sollte erwähnt werden, dass Apple mit ∼ / launchd.conf einen etwas ähnlichen Ansatz verfolgt hat , diesbezüglich werden jedoch Datum und Betriebssystem derzeit nicht unterstützt (siehe die Manpage von
launchd.conf
). Ich denke, dass Dinge wie Globbing nicht so funktionieren würden wie in diesem Vorschlag. Und natürlich kann man diese Dateien an einer anderen Stelle ablegen , mit Ausnahme des Startagenten , der sich in / Library / LaunchAgents / oder ~ / Library / LaunchAgents / befinden muss .Abschließend sollte ich die Quellen erwähnen, die ich als Informationen zu Launch Agents verwendet habe: 1 , 2 , 3 , 4 .
Update : Dies funktioniert derzeit nicht in Version 10.8. Problemumgehungen für jede Anwendung werden hier und hier beschrieben .
quelle
export PATH=.:"$(launchctl getenv PATH)"
Startagenten verwendet, schlage ich vor, in ~ / .bash_profile zu schreiben (ähnlich wie bei anderen Shells). Dies ist möglich, dapath_helper
im Shell-Skript aufgerufen wird. Weitere Informationen zur PATH-Variablen in OS X finden Sie in dieser Antwort .Die Antwort von @flori funktioniert für Maverick, vorausgesetzt, ich führe die folgenden Befehle in Terminal aus, nachdem ich die plist-Datei geändert habe
quelle
Die Antwort von @ percival-ulysses funktioniert für mich unter 10.9 Mavericks mit der folgenden kleinen Änderung: Bearbeiten Sie das Skript /Users/Shared/conflaunchd.sh direkt vor
exit 0
und fügen Sie die Zeilen hinzuum das Dock und die Menüleiste neu zu starten. Danach erben die vom Dock oder von Spotlight aus gestarteten Anwendungen den richtigen PATH. Wenn Sie den Finder verwenden, um die PATH-kritischen Anwendungen zu starten,
killall Finder
kann dies ebenfalls hinzugefügt werden.In der
.bash_profile
benutze ich die LeitungUm den Pfad für das Terminal festzulegen , wird der Pfad vom selben Ort aus gesteuert, der ~ / .conf.launchd- Datei.
quelle
Eine andere Option ist zu verwenden
/etc/launchd.conf
. Zum Beispiel habe ich die Standardeinstellung geändert,PATH
indem ich diese Zeile hinzugefügt habe zu/etc/launchd.conf
:Sie können Änderungen anwenden,
/etc/launchd.conf
indem Sie entweder neu starten oderlaunchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf
Prozesse ausführen und beenden und neu starten.Die Einstellungen
/etc/launchd.conf
gelten sowohl für den Root-Launchd-Prozess als auch für den Pro-Benutzer-Launchd-Prozess. Umgebungsvariablen mit Setsetenv
in/etc/launchd.conf
durch beide gezeigtsudo launchctl export
undlaunchctl export
.quelle