Legen Sie die Umgebungsvariable für Anwendungen beim Start fest

Wie legen Sie eine Umgebungsvariable beim Start fest, damit sie in Anwendungen verwendet werden kann?

Wird beispielsweise ATOM_HOMEvon Atom verwendet.

Welche Methode verwenden Sie, um Atom zu starten? Welche Version für die App und welche Build/Version für macOS.
Ich starte es aus dem Anwendungspaket und verwende High Sierra.

Antworten (1)

Lösung

Die Lösung verwendet zwei Dateien: environment.plistund environment.conf.

environment.plist~/Library/LaunchAgentssollte für eine benutzerspezifische Lösung (empfohlen) oder für /Library/LaunchAgentseine globale Lösung (nicht empfohlen – potenzielle Sicherheitslücke) eingesetzt werden .

environment.confkann fast überall platziert werden. $PATH_TO_ENVIRONMENT_CONFkann relativ sein, aber nur zu den 'Standard'-Umgebungsvariablen oder irgendwelchen, die in einem EnvironmentVariablesSchlüssel definiert sind. 1

environment.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>local.launchd.environment</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>xargs -L 1 launchctl &lt; $PATH_TO_ENVIRONMENT_CONF</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

environment.conf:

setenv ATOM_HOME $HOME/.config/atom
setenv SOME_VAR "Use quotes if spaces are necessary"

Wie es funktioniert

Wenn sich ein Benutzer anmeldet, ~/Library/LaunchAgentswerden die LaunchAgents ausgeführt. In diesem Fall sh -c xargs -L 1 launchctl < $PATH_TO_ENVIRONMENT_CONFwird ausgeführt. launchctlverwaltet Dämonen und Agenten. In diesem Fall verwenden wir es, um eine Umgebungsvariable festzulegen, auf die alle Anwendungen und die Shell zugreifen können.

xargs -L 1 launchctl &lt; $PATH_TO_ENVIRONMENT_CONF

xargs                     # xargs converts stdin to command line arguments
xargs -L 1                # Tells xargs to invoke launchctl for each line
           launchctl      # Run launchctl with the arguments
                     &lt; # Since a plist is an xml document, angle brackets must be escaped. 

                     &lt; $PATH_TO_ENVIRONMENT_CONF
                          # This tells xargs to read input from the file at $PATH_TO_ENVIRONMENT_CONF

Diese Lösung kann auch auf andere launchctl-Unterbefehle erweitert werden.

Scheint in High Sierra nicht zu funktionieren.
Funktioniert bei mir immer noch.