Configuración de la variable de entorno PATH en todo el sistema en Mavericks

41

En versiones anteriores del sistema operativo, se podía configurar la variable de entorno PATH de todo el sistema /etc/launchd.confpara que estuviera disponible para todas las aplicaciones (no solo la línea de comandos).

En Mavericks parece que ya no se usa.

¿Hay otra técnica para hacer esto en rebeldes?

Tom
fuente

Respuestas:

51

Yosemite

/etc/launchd.confya no se admite en 10.10. Ver man launchctl:

El archivo /etc/launchd.conf ya no se consulta para que los subcomandos se ejecuten durante el inicio temprano; Esta funcionalidad se eliminó por razones de seguridad.

Ahora puede, por ejemplo, guardar esta lista como ~/Library/LaunchAgents/my.startup.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>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

El launchctl setenvcomando se ejecuta como el usuario, por lo que solo se aplica a los procesos iniciados en el dominio del usuario.

Este método no se aplica a las aplicaciones que se vuelven a abrir al iniciar sesión si se marca "Reabrir ventanas al volver a iniciar sesión".

Mavericks y anteriores

En 10.9 y anteriores, puede, por ejemplo, ejecutar

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

y luego reiniciar para aplicar los cambios.

Otros metodos

/etc/pathsy /etc/paths.d/aplicar solo (o principalmente) a las conchas. Las líneas en /etc/pathsy /etc/paths.d/*se añaden a la ruta por path_helper , que se ejecuta a partir de /etc/profile, /etc/zshenvy /etc/csh.login. No conozco ningún otro programa que no sea shells que considere /etc/pathso /etc/paths.d/.

~/.MacOSX/environment.plist dejó de funcionar en 10.8.

Lri
fuente
2
Sí; simplemente no existe de forma predeterminada, pero crearlo y establecer entradas adecuadas ayuda
mgol
En Yosemite, descubrí que algunos programas no parecen ver PYTHONPATH, que configuré en /etc/launchd.conf y utilicé la corrección de la línea de comandos (el segundo párrafo en su respuesta) y parece que no funciona , solo me da el mensaje de error / ayuda de launchctl.
Tango
@Tango Edité la respuesta. /etc/launchd.conffue eliminado en 10.10.
Lri
Agregaré que mi experiencia, mientras juego con bash, es que, en 10.10, launchctl setenv parece no hacer nada. Intenté configurar las variables env, luego verifiqué el valor con echo y aún no estaban definidas.
Tango
1
@Tango Salga y vuelva a abrir su aplicación de terminal después de ejecutarla launchctl setenv. launchctl setenvnunca ha afectado los procesos existentes.
Lri
11

Hay una manera mucho más fácil. Coloque un archivo de texto en la carpeta /etc/paths.d/. En este archivo de texto, ingrese la ruta deseada Y una nueva línea. La mejor manera es crear un nuevo archivo para cada ruta.

En mi sistema, hay un archivo llamado MySQL con el texto '/ usr / local / mysql / bin' y una nueva línea.

CaryaSil
fuente
Acabo de publicar una nueva pregunta sobre si hay formas de abordar la debilidad descrita por @LauriRanta.
kuzzooroo
Solo una anécdota: también he usado este método, ya que es el "modo OS X" recomendado. No he tenido mucha suerte al hacer que el Sistema respete de manera consistente los archivos PATH que tengo en /etc/paths.d, y generalmente termino usando el comando export shell o colocando mis PATHs en ~ / .bash_profile, que siempre funcionan, aunque solo sea para mi cuenta de usuario actual y no para todo el sistema. Si los archivos Camino en /etc/paths.d siempre funciona para usted, entonces estoy celosa de que su sistema se comportó mejor que la mía;)
Chillin
Este es nuevo para mí. ¡Agradable!
CousinCocaine
3

Es posible que pueda establecer variables de entorno en el archivo /etc/launchd-user.conf...

En Mavericks, pude configurar una variable de entorno en el archivo usando la línea:

setenv TEST test

Después de un nuevo inicio, $TESTse establece desde /etc/launchd-user.conf.

Editar

Es posible que la sintaxis del archivo en /etc/launchd.conf no sea válida. ¿Puede publicar el contenido de ese archivo para su examen?

Por lo que estoy viendo, configurar la variable PATH en /etc/launchd.conf funciona normalmente. Sin embargo, launchdno realiza ninguna expansión de parámetros . Por lo tanto, si tiene una entrada como setenv PATH $PATH:/usr/local/bin, su ruta resultante se establecería en " $PATH:/usr/local/bin" (nota: no el valor de PATH, sino el texto "$ PATH")

Eddie Kelley
fuente
Gracias, el problema que tengo es configurar la RUTA, otras variables de entorno parecen funcionar.
Tom
@Tom - He proporcionado una sugerencia adicional arriba
Eddie Kelley
1
¿es realmente launch-user.conf o launch- [current_user_name] .conf
Shanimal el
/etc/launchd.conf que contiene 'setenv TEST test' no se propaga a Terminal en mis Mavericks.
Dave X
Uy: s / Mavericks / Yosemite /.
Dave X
0

en mi instalación de Mavericks, agregar "setenv PATH blablabla" a /etc/launchd.conf no funcionó después de reiniciar

así que agregué mi nueva ruta al final de / etc / paths, que funcionó.

George Dima
fuente
No me funcionó. Reinicié, /etc/pathscontiene todo lo que quiero y, sin embargo, Sublime todavía ve solo la RUTA original. Si lo ejecuto desde la terminal, funciona.
mgol
El comando path_helper en mi / etc / profile usa / etc / paths y /etc/paths.d para sobrescribir cualquier RUTA que pueda haber sido /etc/launchd.conf
Dave X
0

Descubrí que setenv PATH todavía funciona para mí para Terminal y aplicaciones, pero rompió en scripts de shell, se lanzó directamente haciendo clic o Abrir con en Terminal desde, por ejemplo, Finder. Es muy extraño. Otras variables de entorno establecidas en el /etc/launchd.conftrabajo.

Para arreglarlo para los scripts de shell iniciados directamente, dupliqué la configuración de RUTA en ~/.bash_profile.

DKroot
fuente
0

Editar /etc/paths.do usar .bash_profileno funcionó para mí, sin embargo, como lo sugirió otra persona (en realidad vine aquí para votar su respuesta, ¡pero no pude encontrarla de nuevo!), Edité lo /etc/pathsque funciona para mí

En mi caso, agregué la herramienta de Android adby androidlos comandos de la terminal apuntando a sus rutas SDK (se adbha movido a otro directorio hoy en día) que se parece

/usr/local/bin
...
/Applications/adt-bundle-mac/sdk/platform-tools  //new entries
/Applications/adt-bundle-mac/sdk/tools
longi
fuente
0

SWEET, agregar ese XML a ~ / Library / LaunchAgents / setenv.SVN.plist permitió que BBEdit usara los binarios de subversión que instalé en / opt.

<clip>
<string>launchctl setenv PATH /opt/subversion/bin:$PATH</string>
<clip>
Mark M
fuente
1
¿Alguna idea de cómo determinar si este archivo admite la expansión de parámetros? Es posible que haya establecido la ruta para que el que está en / opt sea el único. Y estoy pensando que es probable que NO admita el uso de $ PATH. ¿Cómo determinaría la ruta existente para comenzar?
Mark M
-1

Simplemente agregue su ruta 'bin' (la ruta que desea agregar) al archivo / etc / paths - reinicie o vuelva a iniciar sesión !!!

sudo vi /etc/paths 
(create a file (paths file) if it does't exist, I am using 'vi' editor, you can use your own as super user )
then, add your bin directory path like below 

/usr/local/mysql/bin
/usr/local/apache-ant-1.9.3/bin
/usr/local/gradle-1.11/bin

guardar el archivo y volver a iniciar sesión ... espero que esto ayude

code0110
fuente