¿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
/xargs
que se muestra en el comentario del código anterior.Demuestre que sus variables están funcionando abriendo una ventana de Terminal y escribiendo
export
y 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.conf
es 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
.bashrc
o 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:$PATH
bash 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.conf
se 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
launchctl
cómo se cargalaunchd.conf
con el comandoman launchctl
.fuente
environment.plist
no funciona.etc/launchd.conf
antes 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_profile
o.profile
(aunque probablemente tengas que crearlo)Para OS X v10.8 (Mountain Lion) y más allá , necesita usar
launchd
ylaunchctl
.fuente
preferences.plist
era menos que ideal con OS X 10.5 ya que en ese momentopreferences.plist
no 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.plist
funciona 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_profile
gusto 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
plist
sufijo (por ejemplo, nombradoosx-env-sync.plist
) en el~/Library/LaunchAgents/
directorio con los siguientes contenidos:-l
el 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_profile
se obtenga en primer lugar antes de que se ejecute este script.Ahora, el script de shell. Créelo en
~/.osx-env-sync.sh
con 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_profile
entorno 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 progress
Para 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
export
es lo que iba a sugerir, ya que BASH no es compatiblesetenv
Esencialmente, 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.plist
donde 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-startup
Función Emacs lisp:
~/lib/emacs/elisp/macosx/envionment-support.el
NOTA: 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_profile
plataforma de contenido independiente y poner la configuración dellaunchd
entorno (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
system
lauser
opció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/bin
ya no se puede escribir).He leído en varios lugares que usar
launchctl setenv PATH <new path>
para configurar laPATH
variable no funciona debido a un error en OS X (lo que parece cierto por experiencia personal). Descubrí que hay otra forma dePATH
configurar 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
getenv
para 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 elPATH
entorno 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?).launchctl
no le permite establecer variables de entorno arbitrarias. LaPATH
variable es una excepción.En Mountain Lion todo el
/etc/paths
y/etc/launchd.conf
la edición No tiene ningún efecto!Los foros de desarrolladores de Apple dicen:
Así que
Info.plist
edité 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.plist
LSOpenURLsWithRole() 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.conf
para 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 launchctl
yman launchd.conf
en 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.plist
para 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/paths
osudo vim /etc/paths
Introduzca su contraseña cuando se le solicite.
Abra una nueva ventana de terminal y luego escriba:
echo $PATH
Deberí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
~/.profile
se obtiene cada vez que se lanza Terminal.app~/.bashrc
es donde "tradicionalmente" se establecen todas las declaraciones de exportación para el entorno Bash/etc/paths
es 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.plist
con/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
launchctl
pá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
$PATH
variable también está sujeta apath_helper
, que a su vez hace uso del/etc/paths
archivo 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
~/.profile
las 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/paths
y~/.MacOSX/environment.plist
. Esos son nuevos.Pero con Bash, debe saber que
.bashrc
se ejecuta con cada nueva invocación de shell y.bash_profile
solo 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
.bashrc
archivo 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.conf
se 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
.bashrc
es 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.bashrc
en.bash_profile
superar 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_login
y~/.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_logout
archivo. 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
~/.bashrc
archivos 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
~/.bashrc
archivo. 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
.bashrc
pueden ejecutarse muchas veces y a que las subcapas heredan las variables exportadas, es una buena idea poner comandos en el.bash_profile
archivo que se agreguen a las variables existentes .fuente
Toda la magia en iOS solo va con el uso
source
con el archivo, donde exporta sus variables de entorno.Por ejemplo:
Puede crear un archivo como este:
Guarde este archivo como
bimbom.env
y hagasource ./bimbom.ev
. Voilá, tienes tus variables de entorno.Compruébalos con:
fuente
Para Bash, intente agregar sus variables de entorno al archivo
/etc/profile
para que estén disponibles para todos los usuarios. No es necesario reiniciar, simplemente inicie una nueva sesión de Terminal.fuente