Establecer variable de entorno para aplicaciones en el inicio

¿Cómo configura una variable de entorno en el inicio para que pueda usarse en aplicaciones?

Por ejemplo, ATOM_HOMEes utilizado por Atom.

¿Qué método usas para iniciar el átomo? Qué versión para la aplicación y qué compilación/versión para macOS.
Lo inicio desde el paquete de aplicaciones y uso High Sierra.

Respuestas (1)

Solución

La solución utiliza dos archivos: environment.plisty environment.conf.

environment.plistdebe colocarse en ~/Library/LaunchAgentsuna solución por usuario (recomendado) o en /Library/LaunchAgentsuna solución global (no recomendado: posible laguna de seguridad).

environment.confse puede colocar casi en cualquier lugar. $PATH_TO_ENVIRONMENT_CONFpuede ser relativo, pero solo a las variables de entorno 'predeterminadas', o cualquiera que esté definida en una EnvironmentVariablesclave. 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"

Cómo funciona

Cuando un usuario inicia sesión, ~/Library/LaunchAgentsse ejecutan los LaunchAgents. En este caso, sh -c xargs -L 1 launchctl < $PATH_TO_ENVIRONMENT_CONFse ejecuta. launchctlgestiona demonios y agentes. En este caso, lo estamos usando para establecer una variable de entorno accesible para todas las aplicaciones y el 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

Esta solución también se puede extender a otros subcomandos de launchctl.

No parece funcionar en High Sierra.
Todavía funciona para mí.