Los elementos agregados a las rutas a través de paths.d se muestran en todas partes debajo de Mavericks

0

Me gustaría establecer la ruta en OS X Mavericks para que la configuración se muestre en todas partes (por ejemplo, en .apps y en las carcasas de Darwin). Hay mucha discusión sobre cómo establecer variables de entorno en general bajo OS X . Con environments.plist ya no es compatible con Mavericks , parece que editar /etc/launchd.conf es la mejor opción para hacerlo. Desafortunadamente, launchd.conf aparentemente no expansión de parámetros , así que no puedo hacer esto:

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

y no quiero codificar mi ruta completa, parece que no se puede mantener.

Hay otra pregunta en AskDifferent específicamente sobre configurando la variable de entorno PATH de 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 votos positivos) como una advertencia:

  

Las rutas en paths.d se agregan 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 un shell no interactivo o sin inicio de sesión o cuando ejecutas programas en editores de texto.

¿Hay alguna forma en que pueda hacer que estos entornos activen paths.d (por ejemplo, poniendo un comando para procesar paths.d en algún archivo de configuración de bash que se ejecuta incluso para shells no interactivos)?

    
pregunta kuzzooroo 07.04.2014 - 03:29

1 respuesta

0

Opción 1: solo usa /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 reinicie para aplicar los cambios.

La ruta predeterminada es /usr/bin:/bin:/usr/sbin:/sbin .

/etc/launchd.conf se aplica a todos los procesos, que incluyen aplicaciones gráficas, shells sin inicio de sesión y programas iniciados por trabajos launchd.

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

Opción 2: usar un trabajo launchd para establecer la ruta durante el inicio

Guarda esta lista 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 reinicies. Cambia el PATH del proceso root launchd , que es heredado por el usuario launchd process.

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

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

path_helper se ejecuta desde /etc/profile , /etc/zshenv y /etc/csh.login . zsh lee /etc/zshenv incluso para shells que no son de inicio de sesión, pero bash no lee /etc/profile para shells que no son de inicio de sesión.

Esto hace que bash ejecute path_helper para shells interactivos sin inicio de sesión y para shells no interactivos sin inicio de sesión:

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

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

    
respondido por el user495470 10.04.2014 - 11:04

Lea otras preguntas en las etiquetas