Pregunta

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

No duplicado de : Configuración de variables de entorno en OS X ?


Viniendo de un fondo de Windows donde es muy fácil configurar y modificar variables de entorno (solo 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 los equivalentes de las variables del sistema y las variables de usuario? Por ejemplo, ¿dónde debo configurar 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.

¿Fue útil?

Solución

No hay necesidad de duplicación. Puede configurar las variables de entorno utilizadas por launchd (y 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 configurarla en .bashrc o 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. Deberá reiniciar las aplicaciones para obtener las variables de entorno actualizadas (aunque solo puede establecer variables en su shell, por ejemplo, PATH = whatever: you: want ; no es necesario reiniciar el terminal).

Otros consejos

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 : 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 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 mediante la ventana de inicio de sesión 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.
  • instancia de launchd de su usuario: esto se aplica a todos los programas iniciados por el usuario, GUI y CLI. Puede aplicar cambios en cualquier momento mediante el comando setenv en launchctl . En teoría , debería poder poner los comandos setenv en ~ / .launchd.conf , y launchd léelos automáticamente cuando el usuario inicie 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 a launchctl para configurar el entorno launchd .
  • /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 a la raíz ejecutable launchd puede canalizar los comandos en 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 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 evitar el hecho de que ~ / .launchd.conf no 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 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 " .

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.

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

aquí tienes:

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

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

/ 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? "

  • ¿Tienes múltiples usuarios? ¿Les importa? ¿Desordenaría a algún otro usuario cambiando un / etc / profile ?

Generalmente, 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.

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

Para las aplicaciones iniciadas desde Terminal, también puede editar el archivo ~ / .profile.

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, cierre sesión / vuelva a iniciar sesión o simplemente abra una nueva pestaña en Terminal e intente usar su nueva variable.

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

Sincronice las variables de entorno 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í .

Si desea cambiar las variables de entorno de forma permanente en macOS, configúrelas en / etc / paths . Nota , este archivo es de solo lectura de forma predeterminada, por lo que deberá chmod para obtener permisos de escritura.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top