Imposta la variabile di ambiente per le applicazioni all'avvio

1

Come si imposta una variabile d'ambiente all'avvio in modo che possa essere utilizzata nelle applicazioni?

Ad esempio, ATOM_HOME è usato da Atom.

    
posta 0az 01.01.2017 - 21:30
fonte

1 risposta

2

Soluzione

La soluzione utilizza due file: environment.plist e environment.conf .

environment.plist deve essere inserito in ~/Library/LaunchAgents per una soluzione per utente (consigliato) o in /Library/LaunchAgents per una soluzione globale (non consigliato - potenziale scappatoia di sicurezza).

environment.conf può essere posizionato quasi ovunque. $PATH_TO_ENVIRONMENT_CONF può essere relativo, ma solo alle variabili di ambiente 'predefinite' o a quelle definite in una chiave EnvironmentVariables . 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"

Come funziona

Quando un utente effettua l'accesso, vengono eseguiti i LaunchAgent in ~/Library/LaunchAgents . In questo caso, viene eseguito sh -c xargs -L 1 launchctl < $PATH_TO_ENVIRONMENT_CONF . launchctl gestisce daemon e agenti. In questo caso, lo stiamo usando per impostare una variabile d'ambiente accessibile a tutte le applicazioni e alla shell.

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

Questa soluzione può anche essere estesa ad altri sottocomandi launchctl.

    
risposta data 01.01.2017 - 21:30
fonte

Leggi altre domande sui tag