Variables de entorno en Mac OS X

Resuelto Abdullah Jibaly asked hace 15 años • 11 respuestas

Actualización: el siguiente enlace no tiene una respuesta completa . Tener que establecer la ruta o variable en dos lugares (uno para GUI y otro para Shell) es aburrido.

No duplicado de : ¿ Configurar variables de entorno en OS X?


Viniendo de un entorno de Windows donde es muy fácil configurar y modificar variables de entorno (simplemente vaya a Propiedades del sistema > Avanzado > Variables de entorno), no parece ser tan sencillo en Mac OS 10.5. La mayoría de las referencias dicen que debería actualizar /etc/profile o ~/.profile. ¿Son esas el equivalente de las variables del sistema y las variables del usuario? Por ejemplo, ¿dónde debería configurar mi JAVA_HOMEvariable?


EDITAR:

Quiero poder acceder a la variable desde la terminal, así como a una aplicación como Eclipse. Además, espero no tener que reiniciar/cerrar sesión para que esto surta efecto.

Abdullah Jibaly avatar Mar 03 '09 03:03 Abdullah Jibaly
Aceptado

Hay varios lugares donde puede configurar variables de entorno.

  • ~/.profile: use esto para las variables que desea configurar en todos los programas iniciados desde la terminal (tenga en cuenta que, a diferencia de Linux, todos los shells abiertos 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. Úselo para alias y otras cosas que deben redefinirse en subcapas, no para variables de entorno que se heredan.
  • /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 en la ventana de inicio de sesión al iniciar sesión. Se aplica a todas las aplicaciones, incluidas las GUI, excepto aquellas iniciadas por Spotlight en 10.5 (no 10.6). Es necesario cerrar sesión y volver a iniciar sesión para que los cambios surtan efecto. Este archivo ya no es compatible a partir de OS X 10.8.
  • la instancia de su usuario launchd: esto se aplica a todos los programas iniciados por el usuario, GUI y CLI. Puede aplicar cambios en cualquier momento utilizando el setenvcomando en launchctl. En teoría , debería poder introducir setenvcomandos ~/.launchd.confy launchdleerlos automáticamente cuando el usuario inicie sesión, pero en la práctica nunca se implementó la compatibilidad con este archivo. En su lugar, puede utilizar otro mecanismo para ejecutar un script al iniciar sesión y hacer que ese script llame launchctlpara configurar el launchdentorno.
  • /etc/launchd.conf: esto lo lee launchd cuando se inicia el sistema y cuando un usuario inicia sesión. Afectan a todos los procesos del sistema, porque launchd es el proceso raíz. Para aplicar cambios al inicio raíz en ejecución, puede canalizar los comandos a sudo launchctl.

Las cosas fundamentales a 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 lanzamiento y también hay una instancia de lanzamiento 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 configuración de 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 solucionar el hecho de que eso ~/.launchd.confno funciona, puede colocar 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 &lt; ~/.launchd.conf</string>    
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Luego puede ingresarlo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUEy ~/.launchd.confse ejecutará en cada inicio de sesión.

Tenga en cuenta que, al canalizar una lista de comandos a launchctl de esta manera, no podrá configurar variables de entorno con valores que contengan espacios. Si necesita hacerlo, puede llamar a 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 que el agente de lanzamiento y, por lo tanto, es posible que no vean las variables de entorno que establece.

LaC avatar Dec 31 '2010 00:12 LaC

No hay necesidad de duplicación. Puede configurar las variables de entorno utilizadas por launchd (y los procesos secundarios, es decir, cualquier cosa que inicie desde Spotlight) usando launchctl setenv.

Por ejemplo, si desea reflejar su ruta actual en launchd después de configurarlo en .bashrco donde sea:

PATH=whatever:you:want
launchctl setenv PATH $PATH

Las variables de entorno no se actualizan automáticamente en las aplicaciones en ejecución. Necesitará reiniciar las aplicaciones para obtener las variables de entorno actualizadas (aunque puede configurar variables en su shell, por ejemplo PATH=whatever:you:want; no es necesario reiniciar la terminal).

Matt Curtis avatar Sep 21 '2010 01:09 Matt Curtis

Creo que lo que busca el OP es una solución simple similar a Windows.

aqui tienes:

https://www.macupdate.com/app/mac/14617/rcenvironment

Tom Teman avatar Dec 02 '2010 14:12 Tom Teman