Impostazione delle variabili in environment.plist

3

Ho cercato di venire a patti con come impostare le variabili d'ambiente necessarie per avviare le applicazioni in Sierra, ma sono confuso.

Seguendo vari consigli trovati online, ho creato un file ~/Library/LaunchAgents/environment.plist . Sembra così:

<?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>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>
      launchctl setenv FOO foo
      launchctl setenv BAR bar
      <!-- ... -->
      launchctl setenv PATH /usr/local/opt/scala210/bin:/usr/local/bin:$PATH
    </string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Dalla mia sperimentazione, sembra che nientemeno che un riavvio del sistema renderà effettive le modifiche a questo file. Ho trovato menzioni di questo comando che presumibilmente farà il trucco:

$ launchctl load ~/Library/LaunchAgents/environment.plist

... ma quando lo eseguo ottengo questa risposta:

[my home dir]/Library/LaunchAgents/environment.plist: service already loaded

Nella documentazione di launchctl vedo menzione di un -F di flag che sembra rilevante:

Force the loading or unloading of the plist. Ignore the Disabled key.

Tuttavia, non fa differenza se includo questo switch; Ottengo lo stesso risultato e il file è ignorato.

In ogni caso, il riavvio rende effettive le modifiche (forse anche il logout e il back-in non verificherei), ma con un'eccezione: la variabile PATH . Quella variabile è rimasta invariata, indipendentemente dal modo in cui l'ho modificata e dai riavvii. Alla fine mi sono imbattuto in una risposta Stack Exchange che ha avvertito in modo inaspettato che la modifica di PATH in questo modo sarebbe stata ignorata fino al riavvio del Dock con il comando killall Dock . Così l'ho fatto, e riavviato e finalmente ho avuto il mio PATH impostato correttamente.

Quindi, comunque, suppongo che la mia domanda principale sarebbe: c'è un modo più semplice di aggiornare le variabili d'ambiente rispetto al modo in cui descrivo sopra? E una domanda sussidiaria potrebbe essere: la gestione speciale di PATH ha senso?

    
posta Sean 06.07.2017 - 20:53
fonte

1 risposta

2
  • Scarica l'agente di lancio:

    launchctl unload ~/Library/LaunchAgents/environment.plist
    
  • Modifica le impostazioni plist / env
  • Carica di nuovo l'agente di lancio:

    launchctl load ~/Library/LaunchAgents/environment.plist
    

Devi chiudere e riavviare Terminal per ottenere il nuovo valore della variabile nella shell di Terminale.

Raccomando di usare qualcosa come

<string>launchctl setenv FOO foo; launchctl setenv BAR bar; launchctl setenv SUP sup</string>
    
risposta data 06.07.2017 - 21:12
fonte

Leggi altre domande sui tag