¿Cómo configuro la variable de entorno PATH global en OS X?

101

Me gustaría agregar a la variable de entorno PATH global en OS X para que todos los shells de usuario y las aplicaciones GUI obtengan el mismo entorno PATH.

Sé que puedo agregar a la ruta en los scripts de inicio de shell, pero esas configuraciones no son heredadas por las aplicaciones GUI.

La única forma que encontré hasta ahora es redefinir la variable de entorno PATH en /etc/launchd.conf :

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

No pude encontrar una manera de incorporarme a la RUTA launchd.conf.

Estoy un poco preocupado por este método, pero hasta ahora es lo único que funciona. ¿Hay una mejor manera?

lajos
fuente
2
Para Yosemite y
versiones
Ninguna de las respuestas aquí aborda la pregunta del OP. ¡Pero el comentario aquí por parte de thSoft está justo en el dinero! Tal vez esto debería fusionarse o vincularse a esa pregunta referenciada: stackoverflow.com/questions/25385934/…
Kevin Buchs

Respuestas:

71

La información de la GUI de palmer es correcta, pero hay una forma más fácil de mantener para modificar la ruta vista por el shell. Como dijo mediaslave , puede editar /etc/paths, pero aún mejor puede soltar un archivo de texto /etc/paths.d/que tenga una ruta y todos los shells construirán la ruta correctamente.

Por ejemplo, en mi sistema:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin
cogg
fuente
1
¡Genial gracias! Nota: esto requiere que cierre la sesión y vuelva a iniciarla antes de que funcione.
weronika
@weronika: descubrí que era suficiente para dejar de fumar y volver a iniciar X11(menos doloroso que cerrar sesión por completo). No lo probé Terminal.
Peter Gluck
Me refería a la Terminal, tienes razón, olvidé especificar.
weronika
8
Es bueno saberlo, pero NO responde la pregunta del OP porque este mecanismo no se aplica a las aplicaciones GUI. El OP estaba buscando una solución unificada que le permitiera agregar el valor predeterminado $PATH.
Mklement
¿Qué quieres decir con "mi sistema" aquí, @cogg? ¿No estamos todos usando OS X aquí? Lo siento pero todavía soy nuevo en OS X. Estoy usando OS X 10.7
ericn
48

/etc/launchd.conf

El launchd.confarchivo es ** la única solución completa que funcionará tanto para la línea de comandos como para las aplicaciones GUI en OS X v10.8 (Mountain Lion) y v10.9 (Mavericks), una que funcionará con aplicaciones GUI y de consola, para todos los usuarios .

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

Añadir

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

En el ejemplo anterior, agregué /usr/local/binlos valores de entorno predeterminados para PATH.

Tenga en cuenta que este archivo no es un script y que no tiene la opción de usar sustituciones. Además, para que se apliquen, debe reiniciar.

Recuerde, todos los demás son solo soluciones parciales:

  • environment.plist no funciona para aplicaciones iniciadas a través de Spotlight.
  • /etc/paths - solo para consola
  • /etc/csh.cshrco /etc/bashrc- solo para algunos proyectiles

Esta respuesta se basa en la misma pregunta de Establecimiento de variables de entorno en Mac OS X .

Sorin
fuente
77
Gran hallazgo, pero la pregunta ya habla sobre launchd y pregunta cómo agregar al camino en él.
cregox
21
¿Realmente agregaste un comentario a la pregunta original señalando a ti mismo como "la respuesta real"?
TJ Luoma
77
Está implícito en su - útil - respuesta, pero solo para explicarlo: el deseo del OP de agregarse a la ruta predeterminada no es compatible, porque no puede hacer referencia a otras variables de entorno /etc/launchd.conf.
Mklement
No es global: el entorno de línea de comando lo descartará cuando / etc / profile llame a path_helper y reconstruya PATH desde / etc / paths y /etc/paths.d/
Dave X
1
de acuerdo con apple.stackexchange.com/questions/106355/… , esto ya no funciona para Yosemite o más tarde
ericn
7

Tendrás que configurarlo shell por shell; Los shells Bash y csh-like no comparten los mismos archivos de configuración y sintaxis para ajustar la RUTA.

Intentar hacer esto launchctlno funcionará porque las variables de entorno se configuran al iniciar sesión; no existen en todo el sistema en Unix fuera de una sesión de shell.

Entonces vas a querer agregar

setenv PATH "$PATH:/add/my/extra/path"

a /etc/csh.cshrcy

export PATH="$PATH:/more/paths:/

a /etc/bashrc.

Si desea variables de entorno en aplicaciones GUI, eso es más complicado. Debe crear un .MacOSX/environment.plistarchivo en el directorio de inicio de cada usuario. Es .MacOSXprobable que el directorio no exista de manera predeterminada, por lo que deberá crearlo.

El formato del archivo es así:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

Más sobre el environment.plist está en el sitio de Apple .

palmero
fuente
Pero la configuración surte efecto cuando se establece en /etc/launchd.conf ... Hmmm ... / me está confundido.
Xerxes
De Verdad? ¿Qué variable de entorno está configurando allí?
palmer
1
Solo una actualización a partir de OS X 10.8: el ~/.MacOSX/environment.plistenfoque ya no es compatible y no hay sustituto a nivel de usuario. Puede usar todo el sistema /etc/launchd.conf(y hay una solución por - *. Aplicación).
Mklement
No responde las preguntas de OP.
Kevin Buchs
3

Puede editar su ruta global agregando líneas a /etc/paths, una ruta por línea.

sudo nano /etc/paths debería llevarte allí.

manumoomoo
fuente
2
Es bueno saberlo, pero no responde a la pregunta del OP ya que este mecanismo no se aplica a las aplicaciones GUI.
Mklement
1

¿Has echado un vistazo a la página de manual de la path_helperutilidad de línea de comandos en OS X? Respondí una pregunta un tanto relacionada con SO que creo que puede ser útil.

ayaz
fuente
1

No estoy seguro de si alguien cubrió la forma más simple y elegante . Al menos en Mac OS X v10.6 (Snow Leopard).

Messing con la [/etc/|~/.]de [profile|bashrc]los archivos puede trabajar, pero es algo de un truco. El /etc/paths.d/directorio es el camino a seguir:

  • Sudo en tu editor favorito.
  • Cree un nuevo archivo llamado *name*(simplemente no lo nombre como algo que ya está allí) /etc/paths.d/con una ruta por línea:

    /usr/X11/bin
    /Developer/usr/bin
    
  • Luego añade

    eval '/usr/libexec/path_helper -s`
    

    a profileo bashrc, y usted debe ser bueno para ir.

noboomu
fuente
1
Es bueno saberlo, pero no responde a la pregunta del OP ya que este mecanismo no se aplica a las aplicaciones GUI.
Mklement
¿El nombre del archivo es literal *name*? ¿O quieres decir solo name?
Peter Mortensen
0

No estoy seguro si launchd acepta esto, pero intente:

setenv PATH "$ PATH: / my / path"
Gravedad
fuente
1
Lamentablemente eso no funciona. No parece que launchctl tenga acceso a variables de entorno tan fácil. Hay un comando para obtener variables de entorno, pero no hay absolutamente ninguna documentación sobre cómo usarlo.
lajos
0

No estoy seguro de por qué lo /etc/launchd.confusarías /etc/profile, pero no soy un experto en Mac OS X, creo que estoy seguro de que funciona, pero launchdes la implementación / reemplazo de Mac OS X para initMac OS X me confunde.

De todos modos, setenv PATH "$PATH:/more/paths:/and/more/paths"funcionará (tcsh), y el equivalente de shell bourn es export PATH="$PATH:/more/paths:/and/more/paths": tampoco tengo idea de cómo launchdse relaciona con un shell particular.

Creo que he hecho más preguntas y luego he respondido =)

Jerjes
fuente
44
/ etc / la configuración de la ruta del perfil no se ve en ninguna de las aplicaciones de la GUI de OS X. Eso solo se aplica a bash. Quiero que todas las aplicaciones obtengan la nueva configuración de ruta.
lajos
1
Unix? Claro, es unix. Quiero decir, algo así. Sí, rompimos cosas que han funcionado durante 30 años, ¡pero sigue siendo unix! / suspiro
Matt Simmons