Hay varios lugares donde puede establecer variables de entorno.
~/.profile
: use esto para las variables que desea establecer en todos los programas iniciados desde la terminal (tenga en cuenta que, a diferencia de Linux, todas las shells abiertas en Terminal.app son shells de inicio de sesión).
~/.bashrc
: esto se invoca para shells que no son shells de inicio de sesión. Use esto para los alias y otras cosas que deben redefinirse en subcapas, no para las variables de entorno heredadas.
/etc/profile
: esto se carga antes de ~ / .profile, pero por lo demás es equivalente. Úselo cuando desee que la variable se aplique a los programas de terminal iniciados por todos los usuarios en la máquina (suponiendo que usen bash).
~/.MacOSX/environment.plist
: esto se lee mediante loginwindow al iniciar sesión. Se aplica a todas las aplicaciones, incluidas las GUI, excepto las lanzadas por Spotlight en 10.5 (no 10.6). Requiere que cierre sesión y vuelva a iniciar sesión para que los cambios surtan efecto. Este archivo ya no es compatible a partir de OS X 10.8.
- la
launchd
instancia de su usuario : esto se aplica a todos los programas lanzados por el usuario, la GUI y la CLI. Puede aplicar los cambios en cualquier momento utilizando el setenv
comando en launchctl
. En teoría , debería poder poner setenv
comandos ~/.launchd.conf
y launchd
leerlos automáticamente cuando el usuario inicia sesión, pero en la práctica nunca se implementó el soporte para este archivo. En su lugar, puede usar otro mecanismo para ejecutar un script al iniciar sesión y hacer que ese script llame launchctl
para configurar el launchd
entorno.
/etc/launchd.conf
: Esto es leído por launchd cuando el sistema se inicia y cuando un usuario inicia sesión. Afectan a cada proceso en el sistema, porque launchd es el proceso raíz. Para aplicar los cambios a la raíz ejecutable launchd puede canalizar los comandos sudo launchctl
.
Las cosas fundamentales para entender son:
- Las variables de entorno son heredadas por los hijos de un proceso en el momento en que se bifurcan.
- el proceso raíz es una instancia de launchd, y también hay una instancia de launchd separada por sesión de usuario.
- launchd le permite cambiar sus variables de entorno actuales usando
launchctl
; las variables actualizadas son heredadas por todos los procesos nuevos que bifurca a partir de ese momento.
Ejemplo de establecer una variable de entorno con launchd:
echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl
Ahora, inicie su aplicación GUI que usa la variable, ¡y listo!
Para evitar el hecho de que ~/.launchd.conf
no funciona, puede poner el siguiente script en ~/Library/LaunchAgents/local.launchd.conf.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.conf</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>launchctl < ~/.launchd.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Luego puede ponerlo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE
dentro ~/.launchd.conf
, y se ejecutará en cada inicio de sesión.
Tenga en cuenta que, al canalizar una lista de comandos en launchctl de esta manera, no podrá establecer variables de entorno con valores que contengan espacios. Si necesita hacerlo, puede llamar launchctl de la siguiente manera: launchctl setenv MYVARIABLE "QUOTE THE STRING"
.
Además, tenga en cuenta que otros programas que se ejecutan al iniciar sesión pueden ejecutarse antes del iniciador y, por lo tanto, pueden no ver las variables de entorno que establece.