12 votos

Establecimiento de variables en environment.plist

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?

9voto

klanomath Puntos 19587
  • Descargue el agente de lanzamiento:

    launchctl unload ~/Library/LaunchAgents/environment.plist
  • Modificar la configuración de plist/env

  • Cargue de nuevo el agente de lanzamiento:

    launchctl load ~/Library/LaunchAgents/environment.plist

Hay que salir y relanzar el Terminal para obtener el nuevo valor de la variable en el shell.

Con el ejemplo de Kuldeep Yadav comentario el usr.aws.plist en ~/Library/LaunchAgent/ se vería así entonces:

<?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>usr.aws</string>
        <key>ProgramArguments</key>
        <array>
                <string>/bin/launchctl</string>
                <string>setenv</string>
                <string>AWS_SECRET_ACCESS_KEY</string>
                <string>loremipsum</string>
                <string>/bin/launchctl</string>
                <string>setenv</string>
                <string>AWS_ACCESS_KEY_ID</string>
                <string>loremipsum2</string>
                <string>/bin/launchctl</string>
                <string>setenv</string>
                <string>AWS_ACCESS_KEY</string>
                <string>loremipsum3</string>
                <string>/bin/launchctl</string>
                <string>setenv</string>
                <string>AWS_SECRET_KEY</string>
                <string>loremipsum4</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
</dict>
</plist>

Esto sólo se ha probado (y funciona) con bash y zsh.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X