Variables de entorno en Mac OS X


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 cojo.

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


Viniendo de un fondo de Windows donde es muy fácil establecer 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. Mas las referencias dicen que debería actualizar/etc / profile o~/.perfil. ¿Son equivalentes a las Variables del Sistema y a las Variables del Usuario? Por ejemplo, ¿dónde debo establecer mi variable JAVA_HOME?


EDITAR:

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

Author: Community, 2009-03-02

8 answers

No hay necesidad de duplicación. Puede establecer variables de entorno utilizadas por launchd (y procesos hijos, es decir, cualquier cosa que comience desde Spotlight) utilizando launchctl setenv.

Por ejemplo, si desea reflejar su ruta actual en launchd después de configurarla en .bashrc o donde sea:

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

Las variables de entorno no se actualizan automáticamente en aplicaciones en ejecución. Tendrá que volver a iniciar las aplicaciones para obtener las variables de entorno actualizadas (aunque solo puede establecer variables en su shell, por ejemplo PATH=whatever:you:want; no hay necesidad de relanzar el terminal).

 134
Author: Matt Curtis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-05 01:32:11

Hay varios lugares donde se pueden establecer variables de entorno.

  • ~/.profile: use esto para las variables que desea establecer en todos los programas lanzados desde la terminal (tenga en cuenta que, a diferencia de Linux, todos los shells se abren en la Terminal.aplicación 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 alias y otras cosas que necesitan ser redefinidas en subcells, no para variables de entorno que son heredadas.
  • /etc/profile: esto es cargado antes de ~/.perfil, pero por lo demás es equivalente. Úselo cuando desee que la variable se aplique a programas de terminal lanzados por todos los usuarios de la máquina (suponiendo que utilicen bash).
  • ~/.MacOSX/environment.plist: esto es leído por 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 la 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.
  • su usuario launchd instancia: esto se aplica a todos los programas lanzados por el usuario, GUI y CLI. Puede aplicar cambios en cualquier momento utilizando el comando setenv en launchctl. En teoría, debería ser capaz de poner setenv comandos en ~/.launchd.conf, y launchd los leería automáticamente cuando el usuario inicia sesión, pero en la práctica el soporte para este archivo nunca se implementó. En su lugar, puede usar otro mecanismo para ejecutar un script al iniciar sesión, y hacer que ese script llame a launchctl para configurar el entorno launchd.
  • /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 cambios al root launchd en ejecución puede canalizar los comandos a sudo launchctl.

Las cosas fundamentales a entender son: {[23]]}

  • 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 separada launchd instancia 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 entonces.

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 utiliza 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 &lt; ~/.launchd.conf</string>    
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Entonces puede poner setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE dentro de ~/.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 a launchctl de la siguiente manera: launchctl setenv MYVARIABLE "QUOTE THE STRING".

También, tenga en cuenta que otros programas que se ejecutan al inicio de sesión pueden ejecutarse antes del launchagent, y por lo tanto pueden no ver las variables de entorno que establece.

 278
Author: LaC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-30 19:58:33

Creo que lo que el OP está buscando es una solución simple, similar a Windows.

Aquí tienes:

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

 12
Author: Tom Teman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-12 22:56:31

Puedes leer en Linux, que es bastante parecido a lo que es Mac OS X. O puede leer sobre BSD Unix, que está un poco más cerca. En su mayor parte, las diferencias entre Linux y BSD no son grandes.

/etc/profile son variables de entorno del sistema.

~/.profile son variables de entorno específicas del usuario.

"¿dónde debo configurar mi variable JAVA_HOME?"

  • ¿Tiene varios usuarios? ¿Les importa? ¿Confundirías a otro usuario cambiando un /etc/profile?

En general, prefiero no meterme con la configuración de todo el sistema a pesar de que soy el único usuario. Prefiero editar mi configuración local.

 7
Author: S.Lott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-02 20:13:52

Para las aplicaciones GUI, tendrás que crear y editar ~/.MacOSX/environment.plist. Más detalles aquí. Usted tendrá que cerrar la sesión para que estos surtan efecto. No estoy seguro de si también afectan a las aplicaciones lanzadas desde la Terminal, pero supongo que lo harían.

Para las aplicaciones lanzadas desde la Terminal, también puede editar el ~/.archivo de perfil.

 5
Author: JW.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-02 20:27:42

Simplemente abra el archivo ~/.profile, a través de nano en Terminal y escriba allí :

export PATH=whatever/you/want:$PATH

Guarde este archivo (cmd+X e Y). Después de eso, por favor cierre la sesión/inicie sesión de nuevo o simplemente abra una nueva pestaña en Terminal e intente usar su nueva variable.

POR FAVOR, NO olvide agregar": PATH PATH" después de lo que/usted/quiera, de lo contrario borrará todas las rutas en la variable PATH, que estaban allí antes de eso.

 3
Author: Migele,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-06 23:24:51

Sincronice las variables de entorno de OS X para aplicaciones de línea de comandos y GUI desde una única fuente con osx-env-sync.

También publiqué una respuesta a una pregunta relacionada aquí.

 3
Author: Ersin Er,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:59

Si desea cambiar las variables de entorno de forma permanente en El Capitan, establézcalas en /etc/paths. Tenga en cuenta, este archivo es de solo lectura por defecto, por lo que tendrá que chmod para obtener permisos de escritura.

 0
Author: Igor Ganapolsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-29 21:10:04