0 votos

Hacer que los elementos añadidos a las rutas a través de paths.d aparezcan en todas partes en Mavericks

Me gustaría establecer la ruta en OS X Mavericks para que la configuración aparezca en todas partes (por ejemplo, en .apps y en Darwin shells). Hay hay muchas discusiones sobre cómo configurar las variables de entorno en general en OS X . Con environments.plist ya no es compatible con Mavericks parece que edición /etc/launchd.conf es la mejor opción para hacerlo. Por desgracia, launchd.conf aparentemente no hace ninguna expansión de parámetros así que no puedo hacer esto:

setenv PATH /Users/kuzzooroo/anaconda/bin:$PATH

y no quiero codificar toda mi ruta parece imposible de mantener.

Hay otra pregunta en AskDifferent específicamente sobre establecer la variable de entorno PATH en todo el sistema en Mavericks . La solución aceptada es para usar /etc/paths.d/ Pero alguien ha publicado el siguiente comentario (que ha obtenido varios upvotes) como advertencia:

Las rutas en paths.d son añadidas a la ruta por path_helper, que se ejecuta desde /etc/profile y /etc/csh.login, pero no cuando, por ejemplo, se invoca a bash como shell no interactivo o no de acceso o cuando se ejecutan programas en editores de texto.

¿Existe alguna manera de hacer que estos entornos tiren de paths.d (por ejemplo, poniendo un comando para procesar paths.d en algún archivo de configuración de bash que se ejecute incluso para los shells no interactivos)?

0voto

Fuzzy Purple Monkey Puntos 702

Opción 1: sólo utilizar /etc/launchd.conf

Añade una línea como

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

a /etc/launchd.conf y reiniciar para aplicar los cambios.

La ruta por defecto es /usr/bin:/bin:/usr/sbin:/sbin .

/etc/launchd.conf se aplica a todos los procesos, lo que incluye las aplicaciones gráficas, los shells que no son de acceso y los programas iniciados por las tareas de launchd.

Editar /etc/launchd.conf manualmente si ves que algún programa o instalador ha añadido nuevas rutas a /etc/paths o /etc/paths.d/* .

Opción 2: utilizar una tarea launchd para establecer la ruta durante el arranque

Guarde este plist como /Library/LaunchDaemons/setpath.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>setpath</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-c</string>
    <string>launchctl setenv PATH "$((launchctl getenv PATH|tr : \\n
    cat /etc/paths /etc/paths.d/*)|awk '!a[$0]++'|paste -sd: -)"</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

El programa debería ejecutarse la próxima vez que se reinicie. Cambia el PATH de root launchd proceso, que es heredado por el usuario launchd proceso.

En mi opinión, es más fácil editar /etc/launchd.conf sin embargo.

Opción 3: hacer que bash ejecute path_helper incluso para los shells que no son de acceso

ayuda_de_trayectoria se ejecuta desde /etc/profile , /etc/zshenv y /etc/csh.login . zsh lee /etc/zshenv incluso para las conchas que no son de acceso, pero bash no lee /etc/profile para las conchas que no son de acceso.

Esto hace que bash ejecute path_helper para los shells interactivos sin acceso y para los shells no interactivos sin acceso:

echo 'eval $(/usr/libexec/path_helper -s)'>>~/.bashrc
setenv BASH_ENV /etc/profile|sudo tee -a /etc/launchd.conf

No hace bash ejecute path_helper para los shells no interactivos que no son de inicio de sesión invocados como sh . Tampoco afecta a las aplicaciones gráficas ni a los procesos que no se inician desde shells.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X