macos - rutas - Variables de entorno en Mac OS X
system path mac os x (8)
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 cojo.
No duplicado de : configuración de variables de entorno en OS X?
Procedente de un fondo de Windows donde es muy fácil establecer 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 debo actualizar / etc / profile o ~ / .profile. ¿Son ésos el equivalente de variables de sistema y variables de usuario? Por ejemplo, ¿dónde debería establecer mi variable JAVA_HOME
?
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 la sesión para que esto surta efecto.
Creo que lo que el OP está buscando es una solución simple, similar a una ventana.
aqui tienes:
Hay varios lugares donde puede establecer variables de entorno.
-
~/.profile
: use esto para las variables que quiera establecer en todos los programas lanzados desde el 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 shell de inicio de sesión. Úselo para alias y otras cosas que deben redefinirse en subcapas, no para 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 programas de terminal iniciados por todos los usuarios en la máquina (suponiendo que usen bash). -
~/.MacOSX/environment.plist
: esto es leído por loginwindow en el inicio de sesión. Se aplica a todas las aplicaciones, incluidas las GUI, excepto aquellas 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 instancia
launchd
su usuario: esto se aplica a todos los programas lanzados por el usuario, GUI y CLI. Puede aplicar cambios en cualquier momento utilizando el comandosetenv
enlaunchctl
. En teoría , debería poder poner comandossetenv
en~/.launchd.conf
, ylaunchd
los leería automáticamente cuando el usuario~/.launchd.conf
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 el scriptlaunchctl
para configurar el entorno delaunchd
. -
/etc/launchd.conf
: esto se lee al iniciarse cuando se inicia el sistema y cuando un usuario inicia sesión. Afectan todos y cada uno de los procesos en el sistema, porque launchd es el proceso raíz. Para aplicar cambios al launchd root en ejecución, puede canalizar los comandos ensudo 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 la siguiente secuencia de comandos 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 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 en el inicio de sesión pueden ejecutarse antes del launchagent y, por lo tanto, pueden no ver las variables de entorno que establece.
No hay necesidad de duplicación. Puede establecer las variables de entorno utilizadas por launchd (y procesos secundarios, es decir, cualquier cosa que inicie 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 las aplicaciones en ejecución. Tendrá que reiniciar las aplicaciones para obtener las variables de entorno actualizadas (aunque puede simplemente establecer variables en su shell, por ejemplo, PATH=whatever:you:want
; no es necesario reiniciar el terminal).
Para aplicaciones de GUI, deberá crear y editar ~/.MacOSX/environment.plist
. Más detalles here . Deberá cerrar sesión para que estos entren en vigencia. No estoy seguro si también afectan las aplicaciones lanzadas desde la Terminal, pero supongo que lo harían.
Para aplicaciones iniciadas desde Terminal, también puede editar el archivo ~ / .profile.
Puede leer en Linux, que es bastante similar 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 muy grandes.
/etc/profile
son variables de entorno del sistema.
~/.profile
son variables de entorno específicas del usuario.
"¿Dónde debería establecer mi variable JAVA_HOME?"
- ¿Tienes varios usuarios? ¿Les importa? ¿Desordenarías a otro usuario cambiando un
/etc/profile
?
En general, prefiero no meterme con la configuración de todo el sistema aunque sea el único usuario. Prefiero editar mi configuración local.
Si desea cambiar variables de entorno permanentemente en El Capitan, configúrelas en /etc/paths
. Tenga en cuenta que este archivo es de solo lectura por defecto, por lo que tendrá que chmod para permisos de escritura.
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 la sesión / inicie sesión nuevamente 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 / you / want, de lo contrario borrará todas las rutas en la variable PATH, que estaban allí antes de eso.
Sincronice las variables de entorno de OS X para aplicaciones de línea de comando y GUI desde una única fuente con osx-env-sync .
También publiqué una respuesta a una pregunta relacionada here .