He estado tratando de llegar a un acuerdo sobre cómo establecer las variables de entorno que necesitan las aplicaciones lanzadas en Sierra, pero estoy desconcertado.
Siguiendo varios consejos encontrados en Internet, he creado un archivo ~/Library/LaunchAgents/environment.plist
. Se ve así:
<?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>
De mis experimentos, parece que nada menos que un reinicio del sistema hará que los cambios en este archivo tengan efecto. Encontré menciones de este comando que supuestamente hará el truco:
$ launchctl load ~/Library/LaunchAgents/environment.plist
...pero cuando lo ejecuto obtengo esta respuesta:
[my home dir]/Library/LaunchAgents/environment.plist: service already loaded
En la documentación de launchctl
Veo que se menciona un -F
bandera que parece relevante:
Force the loading or unloading of the plist. Ignore the Disabled key.
Sin embargo, no hay ninguna diferencia si incluyo este interruptor; obtengo la misma salida y el archivo se ignora.
De todos modos, reiniciar hace que los cambios surtan efecto (¿quizá también lo haga cerrar la sesión y volver a entrar? No lo he comprobado), pero con una excepción: el PATH
variable. Esa variable seguía siendo la misma sin importar cómo la cambiara, y a través de los reinicios. Finalmente, me encontré con una respuesta de Stack Exchange que advertía que cambiar PATH
de esta manera se ignoraría hasta que el Dock se reiniciara con el killall Dock
comando. Así que hice eso, y reinicié, y finalmente Yo tenía mi PATH
ajustado correctamente.
Así que, de todos modos, supongo que mi pregunta principal sería: ¿Existe alguna forma más sencilla de actualizar las variables de entorno que la que he descrito anteriormente? Y una pregunta subsidiaria podría ser: ¿El manejo especial de PATH
¿tiene algún sentido?