En Mountain Lion, ¿cómo configuro, en un lugar, la variable de entorno PATH para todas las aplicaciones lanzadas recientemente?

9

En Ask Different hay muchas preguntas con respecto a la PATHvariable de entorno y cómo configurarla para aplicaciones iniciadas por un shell, por foco o por medio del buscador (preguntas típicas: Cómo configurar PATH para aplicaciones iniciadas por Finder o Cómo cambiar la variable de entorno PATH. .. ).

Las respuestas van desde shlos scripts de inicio de /etc/pathsa /etc/launchd.conf. Aquí estoy después de la respuesta para una configuración unificada de PATHtodas las aplicaciones en Mac OS X Mountain Lion 10.8.2.

halloleo
fuente

Respuestas:

14

Después de muchas pruebas con diferentes opciones, concluyo:

¿Existe una forma unificada de configurar las PATHaplicaciones iniciadas por diferentes medios (como script de shell, Finder y Spotlight)? Pues sí y no:

  • No : la configuración PATHen scripts de inicio de shell (p .bashrc. Ej. ) Funciona solo para aplicaciones iniciadas por shells.
  • No : la configuración PATHdel launchdproceso actual a través de launchctl setenv PATH <...>no me funciona en absoluto.
  • : Ajuste PATHen /etc/launchd.conf(y reiniciar el sistema) hará que la adecuada PATHvisible en las aplicaciones iniciadas por proyectiles (locales) Spotlight, Dock y Finder y posteriormente.
  • No : los shells invocados de forma remota no heredan el entorno. (Ver ... ¿por qué los shells remotos a través de ssh NO heredan el entorno ...? )

Notas para la configuración de conchas:

  1. Para un funcionamiento correcto en shells locales , es importante desactivar el uso de /usr/libexec/path_helper, porque las rutas predeterminadas en /etc/pathspodrían cambiar el orden de las rutas en PATH. **

  2. Para acomodar shells remotos , debe volver a importar el launchdentorno en el shell. Use algo como esto en su .bashrc:

# the vexatious path stuff
eval $(launchctl export)

Las consecuencias desafortunadas de todo el problema son:

  • No hay forma de tener estas configuraciones unificadas por usuario. ( ~/.launchd.confno funciona)
  • No hay una manera fácil de construir la RUTA a partir de diferentes fuentes utilizando técnicas como la expansión del directorio principal, et al.
halloleo
fuente
Actualización: PATH Ajuste por medio de /etc/launch.confno no trabajar para conchas registra en forma remota a través de SSH (supongo que debido a que el sshdno pasa su entorno que hereda de su padre launchda la cáscara niño.). - Editaré la respuesta en consecuencia.
halloleo
Respuesta actualizada con una solución para shells remotos.
halloleo
1
Gran respuesta; Se puede simplificar el abastecimiento del medio ambiente launchd de la siguiente manera: eval "$(launchctl export)".
mklement0
Una manera fácil de editar /etc/launchd.confes simplemente ejecutar sudo -e /etc/launchd.conf(si está familiarizado con vi) o EDITOR=nano sudo -e /etc/launchd.conf(si prefiere un editor no modal).
nohillside
3

Ampliando la respuesta anterior , para cambiar la ruta /etc/launchd.conf, deberá hacer lo siguiente.

  1. Asegúrese de tener privilegios de administrador.

  2. Cree un nuevo archivo de texto con el siguiente contenido, modificado para satisfacer sus necesidades:

    setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Users/YourUserName/bin
    
  3. Guárdelo en su directorio de inicio como launchd.conf.

  4. Abra Terminal.app (o su sustituto favorito) y escriba:

    sudo mv ~/launchd.conf /etc

    Dependiendo de su uso anterior del sudocomando, puede recibir un breve mensaje de "tenga cuidado de hacer lo que está haciendo", pero de cualquier manera deberá ingresar su contraseña. Todo lo que hace el comando es mover el archivo al /etcdirectorio, al que no se puede acceder directamente al guardar un archivo en TextEdit, por ejemplo. sudo(abreviatura de "Super User DO") se utiliza porque se necesitan privilegios de administrador para escribir en ese directorio.

  5. Reinicie su computadora.

Y deberías estar listo. ¡Buena suerte!

MattDMo
fuente
Gracias por los detalles, pero la pregunta no era sobre cómo modificar launchd.conf, sino cómo todas las aplicaciones obtienen la misma variable PATH de manera unificada.
halloleo
Derecho, pero que originalmente buscaba la cuestión tratando de encontrar la manera de establecer la PATHde mis aplicaciones GUI, y pensé que había que echar una mano lo que las almas pobres puede no saber cómo llevar a cabo el cambio ...
MattDMo
Tienes un punto válido aquí; Aún así, creo que integrar su información en la respuesta es la mejor opción. - Creo que este hilo de comentarios se convierte en una meta discusión, así que lo abrí en meta.stackoverflow como Qué hacer con una respuesta adicional ...
halloleo
1
en realidad, ¿no debería haber estado en meta.apple.stackexchange.com?
MattDMo
De hecho, meta.apple.stackexchange.com habría sido el lugar correcto. Simplemente no sabía que existe ...
halloleo
-2

Puede probar https://github.com/ersiner/osx-env-sync .

Maneja tanto la línea de comandos como las aplicaciones GUI desde una sola fuente . Y funciona con la última versión de OS X (Yosemite).

Ersin Er
fuente
Lo que simplemente automatiza la otra respuesta usando el bit que dice que no funciona, por ejemplo: launchctl setenv PATH <...>
user151019
@ Mark Esto no tiene nada que ver con la automatización de los pasos de una respuesta aquí. Este usa un Agente de Lanzamiento. Te sugiero que lo pruebes.
Ersin Er
La solución aceptada también usa el launchdsistema. Su solución tiene los mismos problemas que se indican en la respuesta aceptada.
halloleo
@halloleo ¿Realmente lo has probado? ¿Y en qué versión de OS X?
Ersin Er