¿Cuál es la forma correcta de modificar variables de entorno como PATH en OS X?
He buscado un poco en Google y he encontrado tres archivos diferentes para editar:
- / etc / caminos
- ~ / .profile
- ~ / .tcshrc
Ni siquiera tengo algunos de estos archivos, y estoy bastante seguro de que .tcshrc está mal, ya que OS X usa bash ahora. ¿Dónde se definen estas variables, especialmente la RUTA?
Estoy ejecutando OS X v10.5 (Leopard).
macos
bash
path
environment-variables
Paul Wicks
fuente
fuente

env "switch.1.disabled=true" open -n /Applications/Eclipse.app/para iniciar la aplicación GUI con un nuevo entorno de sistema establecido.Respuestas:
Bruno está en el buen camino. He realizado una investigación exhaustiva y si desea establecer variables que están disponibles en todas las aplicaciones GUI, su única opción es
/etc/launchd.conf.Tenga en cuenta que environment.plist no funciona para aplicaciones iniciadas a través de Spotlight. Esto está documentado por Steve Sexton aquí .
Abrir un indicador de terminal
Tipo
sudo vi /etc/launchd.conf(nota: es posible que este archivo aún no exista)Ponga contenidos como el siguiente en el archivo
Guarde sus cambios en vi y reinicie su Mac. O utilice el comando
grep/xargsque se muestra en el comentario del código anterior.Demuestre que sus variables están funcionando abriendo una ventana de Terminal y escribiendo
exporty debería ver sus nuevas variables. También estarán disponibles en IntelliJ IDEA y otras aplicaciones GUI que inicie a través de Spotlight.fuente
launchd.confes unidireccional, pero necesita reiniciar (para reiniciar launchd). Si desea evitar un reinicio, vea mi respuesta stackoverflow.com/questions/135688/…Cómo configurar el entorno para nuevos procesos iniciados por Spotlight (sin necesidad de reiniciar)
Puede configurar el entorno utilizado por launchd (y, por extensión, todo lo que comenzó desde Spotlight) con
launchctl setenv. Por ejemplo, para establecer la ruta:O si desea configurar su ruta
.bashrco similar, haga que se refleje en launchd:No hay necesidad de reiniciar, aunque necesitará reiniciar una aplicación si desea que recoja el entorno modificado.
Esto incluye todos los shells que ya se ejecutan en Terminal.app, aunque si está allí puede configurar el entorno más directamente, por ejemplo, con
export PATH=/opt/local/bin:/opt/local/sbin:$PATHbash o zsh.Cómo mantener los cambios después de un reinicio
Para mantener los cambios después de un reinicio , puede establecer las variables de entorno desde
/etc/launchd.conf:launchd.confse ejecuta automáticamente cuando reinicia.Si desea que estos cambios surtan efecto ahora, debe usar este comando para reprocesar
launchctl.conf(¡gracias @mklement por la sugerencia!)Puede obtener más información sobre
launchctlcómo se cargalaunchd.confcon el comandoman launchctl.fuente
environment.plistno funciona.etc/launchd.confantes de un reinicio sería utilizar el enfoque en la respuesta de @ MatthewMcCullough:egrep "^setenv\ " /etc/launchd.conf | xargs -t -L 1 launchctl.Hasta OS X v10.7 (Lion) inclusive , puede configurarlos en:
Ver:
Para PATH en la Terminal, deberías poder configurar
.bash_profileo.profile(aunque probablemente tengas que crearlo)Para OS X v10.8 (Mountain Lion) y más allá , necesita usar
launchdylaunchctl.fuente
preferences.plistera menos que ideal con OS X 10.5 ya que en ese momentopreferences.plistno se leía para las aplicaciones lanzadas a través de Spotlight, vea el comentario de Louis a la respuesta de Matthew y el correo electrónico.esm.psu.edu / pipermail / macosx - emacs / 2010 - May /002113.html . Para OS X 10.6environment.plistfunciona como debería.Solución para aplicaciones de línea de comandos y GUI desde una sola fuente (funciona con Mac OS X v10.10 (Yosemite) y Mac OS X v10.11 (El Capitan))
Supongamos que tiene definiciones de variables de entorno en su
~/.bash_profilegusto en el siguiente fragmento:Necesitamos un Agente de inicio que se ejecutará en cada inicio de sesión y en cualquier momento a pedido que cargue estas variables en la sesión del usuario. También necesitaremos un script de shell para analizar estas definiciones y crear los comandos necesarios para que el agente los ejecute.
Cree un archivo con
plistsufijo (por ejemplo, nombradoosx-env-sync.plist) en el~/Library/LaunchAgents/directorio con los siguientes contenidos:-lel parámetro es crítico aquí; es necesario para ejecutar el script de shell con un shell de inicio de sesión para que~/.bash_profilese obtenga en primer lugar antes de que se ejecute este script.Ahora, el script de shell. Créelo en
~/.osx-env-sync.shcon los siguientes contenidos:Asegúrese de que el script de shell sea ejecutable:
Ahora, cargue el agente de lanzamiento para la sesión actual:
(Re) Inicie una aplicación GUI y verifique que puede leer las variables de entorno.
La configuración es persistente. Sobrevivirá a los reinicios y reinicios de sesión.
Después de la configuración inicial (que acaba de hacer), si desea reflejar cualquier cambio en su
~/.bash_profileentorno completo nuevamente, volver a ejecutar ellaunchctl load ...comando no realizará lo que desea; en su lugar, recibirá una advertencia como la siguiente:<$HOME>/Library/LaunchAgents/osx-env-sync.plist: Operation already in progressPara volver a cargar las variables de entorno sin pasar por el proceso de cierre de sesión / inicio de sesión, haga lo siguiente:
Finalmente, asegúrese de relanzar sus aplicaciones que ya se están ejecutando (incluida Terminal.app) para informarles de los cambios.
También envié el código y las explicaciones aquí a un proyecto de GitHub: osx-env-sync .
Espero que esta sea la solución definitiva, al menos para las últimas versiones de OS X (Yosemite y El Capitan).
fuente
Hacer:
Es posible que el archivo no exista (si no, simplemente puede crearlo).
Escriba esto y guarde el archivo:
correr
fuente
exportes lo que iba a sugerir, ya que BASH no es compatiblesetenvEsencialmente, hay dos problemas que resolver cuando se trata con variables de entorno en OS X. El primero es al invocar programas desde Spotlight (el icono de la lupa en el lado derecho del menú Mac / barra de estado) y el segundo al invocar programas desde el Dock . La invocación de programas desde una aplicación de Terminal / utilidad es trivial ya que lee el medio ambiente de los lugares de concha estándar (
~/.profile,~/.bash_profile,~/.bashrc, etc.)Al invocar programas desde el Dock, use
~/.MacOSX/environment.plistdonde el<dict>elemento contiene una secuencia de<key>KEY</key><string>theValue</string>elementos.Al invocar programas desde Spotlight, asegúrese de que launchd se haya configurado con todas las configuraciones de clave / valor que necesita.
Para resolver ambos problemas simultáneamente, utilizo un elemento de inicio de sesión (configurado a través de la herramienta de Preferencias del Sistema) en mi cuenta de Usuario. El elemento de inicio de sesión es un script bash que invoca una función Emacs lisp, aunque, por supuesto, se puede usar su herramienta de secuencias de comandos favorita para lograr lo mismo. Este enfoque tiene el beneficio adicional de que funciona en cualquier momento y no requiere un reinicio, es decir, se puede editar
~/.profile, ejecutar el elemento de inicio de sesión en algún shell y tener los cambios visibles para los programas recién invocados, ya sea desde el Dock o Spotlight.Detalles:
Elemento de inicio de sesión:
~/bin/macosx-startupFunción Emacs lisp:
~/lib/emacs/elisp/macosx/envionment-support.elNOTA: Esta solución es una amalgama de las que vinieron antes de agregar la mía, particularmente la ofrecida por Matt Curtis, pero he tratado deliberadamente de mantener mi
~/.bash_profileplataforma de contenido independiente y poner la configuración dellaunchdentorno (una instalación solo para Mac) en un script separado .fuente
Otra solución gratuita / de código abierto para Mac OS X v10.8 (Mountain Lion) Preference pane / environment.plist es EnvPane .
El código fuente de EnvPane está disponible en GitHub . Parece que EnvPane tiene características comparables a RCEnvironment , sin embargo, parece que puede actualizar sus variables almacenadas al instante, es decir, sin la necesidad de reiniciar o iniciar sesión, lo cual es bienvenido.
Según lo declarado por el desarrollador:
Descargo de responsabilidad: de ninguna manera estoy relacionado con el desarrollador o su proyecto.
PD: Me gusta el nombre (suena como 'Termina el dolor').
fuente
Actualización (2017-08-04)
A partir de (al menos) macOS 10.12.6 (Sierra), este método parece haber dejado de funcionar para Apache httpd (tanto para
systemlauseropción como para lalaunchctl config). Otros programas no parecen verse afectados. Es concebible que este sea un error en httpd.Respuesta original
Esto se refiere a OS X 10.10+ (10.11+ específicamente debido al modo sin raíz donde
/usr/binya no se puede escribir).He leído en varios lugares que usar
launchctl setenv PATH <new path>para configurar laPATHvariable no funciona debido a un error en OS X (lo que parece cierto por experiencia personal). Descubrí que hay otra forma dePATHconfigurar las aplicaciones que no se inician desde el shell :Esta opción está documentada en la página de manual de launchctl:
He confirmado que esto funciona con una aplicación GUI iniciada desde Finder (que se usa
getenvpara obtener PATH). Tenga en cuenta que solo tiene que hacer esto una vez y el cambio será persistente a través de reinicios.fuente
sudo launchctl procinfo <gui-pid>muestra elPATHentorno recién configurado . Pero ensudo launchctl config user path <new path>realidad está configurado para todos los usuarios ... (confirmado al agregar un nuevo usuario y usar la consola de Python de Sublime Text)sudo launchctl config user path, que esto sucede (¿qué parece estar asumiendo?).launchctlno le permite establecer variables de entorno arbitrarias. LaPATHvariable es una excepción.En Mountain Lion todo el
/etc/pathsy/etc/launchd.confla edición No tiene ningún efecto!Los foros de desarrolladores de Apple dicen:
Así que
Info.plistedité directamente la aplicación (haga clic derecho en "AppName.app" (en este caso SourceTree) y luego "Show package contents").Y agregué un nuevo par clave / dict llamado:
(ver: LaunchServicesKeys Documentation en Apple )
Ahora la aplicación (en mi caso Sourcetree) usa la ruta dada y funciona con Git 1.9.3 :-)
PD: Por supuesto, debe ajustar la entrada de ruta a sus necesidades de ruta específicas.
fuente
Info.plistLSOpenURLsWithRole() failed with error -10810 for the file /Applications/Slack.app.Si bien las respuestas aquí no son "incorrectas", agregaré otra: nunca realice cambios en las variables de entorno en OS X que afecten a "todos los procesos", o incluso, fuera del shell, para todos los procesos ejecutados interactivamente por un usuario determinado.
En mi experiencia, los cambios globales en las variables de entorno como PATH para todos los procesos son aún más propensos a romper cosas en OS X que en Windows. La razón es que muchas aplicaciones de OS X y otro software (incluidos, quizás especialmente, componentes del sistema operativo en sí) dependen de las herramientas de línea de comandos de UNIX bajo el capó, y asumen el comportamiento de las versiones de estas herramientas proporcionadas con el sistema, y no necesariamente use rutas absolutas al hacerlo (comentarios similares se aplican a bibliotecas cargadas dinámicamente y variables de entorno DYLD_ *). Considere, por ejemplo, que las respuestas mejor calificadas a varias preguntas de Stack Overflow sobre el reemplazo de versiones de intérpretes suministradas por OS X como Python y Ruby generalmente dicen "no haga esto".
OS X no es realmente diferente de otros sistemas operativos similares a UNIX (por ejemplo, Linux, FreeBSD y Solaris) a este respecto; La razón más probable por la que Apple no proporciona una manera fácil de hacer esto es porque rompe las cosas . En la medida en que Windows no es tan propenso a estos problemas, se debe a dos cosas: (1) el software de Windows no tiende a depender de herramientas de línea de comandos en la medida en que lo hace el software UNIX, y (2) Microsoft ha tenido Un historial tan extenso tanto de "infierno de DLL" como de problemas de seguridad causados por cambios que afectan a todos los procesos que han cambiado el comportamiento de la carga dinámica en las versiones más recientes de Windows para limitar el impacto de las opciones de configuración "globales" como PATH.
"Cojo" o no, tendrá un sistema mucho más estable si restringe dichos cambios a ámbitos más pequeños.
fuente
A veces, todas las respuestas anteriores simplemente no funcionan. Si desea tener acceso a una variable del sistema (como
M2_HOME) en Eclipse o en IntelliJ IDEA, lo único que me funciona en este caso es:Primero (paso 1) edite
/etc/launchd.confpara contener una línea como esta: "setenv VAR value" y luego (paso 2) reinicie.Simplemente modificar .bash_profile no funcionará porque en OS X las aplicaciones no se inician como en otros Unix; no heredan las variables de shell del padre. Todas las otras modificaciones no funcionarán por una razón que desconozco. Quizás alguien más pueda aclarar sobre esto.
fuente
Después de perseguir el panel de preferencias de Variables de entorno y descubrir que el enlace está roto y una búsqueda en el sitio de Apple parece indicar que lo han olvidado ... Empecé de nuevo en el rastro del difícil proceso de lanzamiento.
En mi sistema (Mac OS X 10.6.8) parece que las variables definidas en environment.plist se exportan de manera confiable a las aplicaciones iniciadas desde Spotlight (a través de launchd). Mi problema es que esos vars no se exportan a nuevas sesiones de bash en Terminal. Es decir, tengo el problema opuesto como se describe aquí.
NOTA: environment.plist se parece a JSON, no a XML, como se describió anteriormente
Pude obtener aplicaciones de Spotlight para ver los vars editando ~ / MacOSX / environment.plist y pude forzar los mismos vars a una nueva sesión de Terminal al agregar lo siguiente a mi archivo .profile:
fuente
man launchd,man launchctlyman launchd.confen una ventana de terminal. Me alegra que Apple mantenga las páginas de manual actualizadas, incluso si la Mac Developer Library se retrasa un poco.Cualquiera de los archivos de la puesta en marcha del golpe -
~/.bashrc,~/.bash_profile,~/.profile. También hay algún tipo de archivo extraño llamado~/.MacOSX/environment.plistpara variables de entorno en aplicaciones GUI.fuente
Al igual que la respuesta que dio Matt Curtis, configuro variables de entorno a través de launchctl, pero lo envuelvo en una función llamada exportar, de modo que cada vez que exporto una variable como normal en mi .bash_profile, también se establece mediante launchctl. Esto es lo que hago:
Mi .bash_profile consta únicamente de una línea, (Esto es solo una preferencia personal).
Mi .bashrc tiene esto:
Lo anterior sobrecargará la "exportación" incorporada de Bash y exportará todo normalmente (¡notará que exporto "exportar" con él), luego los configurará correctamente para entornos de aplicaciones OS X a través de launchctl, ya sea que use alguno de los siguientes:
De esta manera, no tengo que enviar todas las variables a launchctl cada vez, y simplemente puedo configurar mi .bash_profile / .bashrc de la forma que quiero. Abra una ventana de terminal, revise las variables de entorno que le interesan
launchctl getenv myVar, cambie algo en su .bash_profile / .bashrc, cierre la ventana de terminal y vuelva a abrirla, verifique la variable nuevamente con launchctl, y listo, está cambiado.Nuevamente, al igual que las otras soluciones para el mundo posterior a Mountain Lion, para que las nuevas variables de entorno estén disponibles para las aplicaciones, debe iniciarlas o reiniciarlas después del cambio.
fuente
Aquí hay una manera muy simple de hacer lo que quieres. En mi caso, estaba haciendo que Gradle funcionara (para Android Studio).
Ejecute el siguiente comando:
sudo nano /etc/pathsosudo vim /etc/pathsIntroduzca su contraseña cuando se le solicite.
Abra una nueva ventana de terminal y luego escriba:
echo $PATHDebería ver la nueva ruta adjunta al final de la RUTA.
Obtuve estos detalles de esta publicación:
Agregar a la RUTA en Mac OS X 10.8 Mountain Lion y hasta
fuente
Creo que el OP está buscando una solución simple, similar a Windows.
Aqui tienes:
http://www.apple.com/downloads/macosx/system_disk_utilities/environmentvariablepreferencepane.html
fuente
Para ser conciso y claro sobre para qué está destinado cada archivo
~/.profilese obtiene cada vez que se lanza Terminal.app~/.bashrces donde "tradicionalmente" se establecen todas las declaraciones de exportación para el entorno Bash/etc/pathses el archivo principal en Mac OS que contiene la lista de rutas predeterminadas para construir la variable de entorno PATH para todos los usuarios/etc/paths.d/contiene archivos que contienen rutas de búsqueda adicionales¡Los programas no terminales no heredan las variables PATH y MANPATH de todo el sistema que sí hace su terminal! Para establecer el entorno para todos los procesos iniciados por un usuario específico, haciendo que las variables de entorno estén disponibles para las aplicaciones GUI de Mac OS X, esas variables deben definirse en su
~/.MacOSX/environment.plist(Preguntas y respuestas técnicas de Apple QA1067)Use la siguiente línea de comando para sincronizar su
environment.plistcon/etc/paths:fuente
/etc/launchd.conf no se usa en OS X v10.10 (Yosemite), OS X v10.11 (El Capitan), macOS v10.12 (Sierra) o macOS v10.13 (High Sierra).
Desde la
launchctlpágina del manual:El método descrito en esta respuesta Preguntar diferente funciona para mí (después de un reinicio): las aplicaciones iniciadas desde el Dock o desde Spotlight heredan las variables de entorno que configuré
~/Library/LaunchAgents/my.startup.plist. (En mi caso, necesitaba configurarLANG, paraen_US.UTF-8, un complemento de Sublime Text).fuente
La
$PATHvariable también está sujeta apath_helper, que a su vez hace uso del/etc/pathsarchivo y los archivos en/etc/paths.d.Se puede encontrar una descripción más completa en PATH y otros problemas del entorno en Leopard (2008-11)
fuente
Es simple:
Edite ~ / .profile y coloque sus variables de la siguiente manera
En archivo puesto:
Guardar (: wq)
Reinicie el terminal (salga y ábralo de nuevo)
Asegúrese de que todo esté bien:
fuente
Para una modificación de un solo usuario, use
~/.profilelas que enumeró. El siguiente enlace explica cuándo Bash lee los diferentes archivos.http://telin.ugent.be/~slippens/drupal/bashrc_and_others
Si desea establecer la variable de entorno para aplicaciones GUI, necesita el archivo ~ / .MacOSX / environment.plist
fuente
Bueno, no estoy seguro acerca de los archivos
/etc/pathsy~/.MacOSX/environment.plist. Esos son nuevos.Pero con Bash, debe saber que
.bashrcse ejecuta con cada nueva invocación de shell y.bash_profilesolo se ejecuta una vez al inicio.No sé con qué frecuencia es esto con Mac OS X. Creo que la distinción se ha roto con el sistema de ventanas que inicia todo.
Personalmente, elimino la confusión creando un
.bashrcarchivo con todo lo que necesito y luego hago:fuente
Una cosa a tener en cuenta además de los enfoques sugeridos es que, al menos en OS X 10.5 (Leopard), las variables establecidas
launchd.confse fusionarán con las configuraciones realizadas.profile. Supongo que es probable que esto también sea válido para la configuración~/.MacOSX/environment.plist, pero no lo he verificado.fuente
Configure su variable de entorno PATH en Mac OS
Abra el programa Terminal (está en su carpeta de Aplicaciones / Utilidades por defecto). Ejecute el siguiente comando
Esto abrirá el archivo en su editor de texto predeterminado.
Para Android SDK como ejemplo:
Debe agregar la ruta al directorio de herramientas y herramientas de la plataforma del SDK de Android. En mi ejemplo, usaré "/ Development / android-sdk-macosx" como el directorio en el que está instalado el SDK. Agregue la siguiente línea:
Guarde el archivo y salga del editor de texto. Ejecute su .bash_profile para actualizar su RUTA:
Ahora, cada vez que abra el programa Terminal, su RUTA incluirá el SDK de Android.
fuente
Acabo de hacer esto realmente fácil y rápido. Primero cree un ~ / .bash_profile desde la terminal:
entonces
añadir
guarde el documento y ya está.
fuente
Es bastante simple. Edite el archivo
.profile(vi, nano , Sublime Text u otro editor de texto). Puede encontrarlo en el~/directorio (directorio de usuarios) y configurarlo así:Ejemplo con Java en casa:
Guárdelo y regrese a la terminal.
Puedes recargarlo con:
O cierre y abra la ventana de su terminal.
fuente
Hay dos tipos de proyectiles en juego aquí.
Es importante entender aquí que con Bash, el archivo
.bashrces de sólo lectura por una concha que a la vez interactiva y no inicio de sesión, y usted encontrará que la gente a menudo se cargan.bashrcen.bash_profilesuperar esta limitación.Ahora que tiene la comprensión básica, pasemos a cómo le aconsejaría que lo configure.
.bash_file:
fuente
Conchas de inicio de sesión
El shell primero ejecuta los comandos en el archivo
/etc/profile. Un usuario que trabaja con privilegios de root puede configurar este archivo para establecer las características predeterminadas de todo el sistema para los usuarios que ejecutan Bash.A continuación, las miradas de concha para
~/.bash_profile,~/.bash_loginy~/.profile(~ / es taquigrafía para su directorio personal), en ese orden, la ejecución de los comandos en el primero de estos archivos que encuentre. Puede poner comandos en uno de estos archivos para anular los valores predeterminados establecidos/etc/profile. Un shell que se ejecuta en una terminal virtual no ejecuta comandos en estos archivos.Cuando cierra sesión, bash ejecuta comandos en el
~/.bash_logoutarchivo. Este archivo a menudo contiene comandos que se limpian después de una sesión, como los que eliminan archivos temporales.Conchas interactivas sin inicio de sesión
Aunque no se llama directamente por bash, muchos
~/.bashrcarchivos llaman/etc/bashrc. Esta configuración permite a un usuario que trabaja con privilegios de root establecer características predeterminadas de todo el sistema para shells bash que no inician sesión.Un shell interactivo sin inicio de sesión ejecuta comandos en el
~/.bashrcarchivo. Normalmente, un archivo de inicio para un shell de inicio de sesión, como por ejemplo.bash_profile, ejecuta este archivo, por lo que tanto los shells de inicio de sesión como los que no lo hacen ejecutan los comandos.bashrc.Debido a que los comandos
.bashrcpueden ejecutarse muchas veces y a que las subcapas heredan las variables exportadas, es una buena idea poner comandos en el.bash_profilearchivo que se agreguen a las variables existentes .fuente
Toda la magia en iOS solo va con el uso
sourcecon el archivo, donde exporta sus variables de entorno.Por ejemplo:
Puede crear un archivo como este:
Guarde este archivo como
bimbom.envy hagasource ./bimbom.ev. Voilá, tienes tus variables de entorno.Compruébalos con:
fuente
Para Bash, intente agregar sus variables de entorno al archivo
/etc/profilepara que estén disponibles para todos los usuarios. No es necesario reiniciar, simplemente inicie una nueva sesión de Terminal.fuente