Después de que yo había resuelto OSX' RUTA de los problemas a los Mavericks de liberación, los problemas vienen de vuelta en Yosemite!!!
Así que me quieren imitar a los antiguos launch.conf
característica en el nuevo Mac OSX 10.10 Yosemite liberación, con el fin de tener la variable de entorno PATH en la GUI de aplicaciones como de Carbono Emacs o RStudio disponible. He utilizado la gran idea de stackoverflow usuario ursa para configurar una secuencia de comandos de shell que configura las variables de entorno a través de la launchctl
. (Véase su respuesta de stackoverflow aquí.) Esto funciona para la mayoría de las variables de entorno, pero no para la variable PATH.
1. ¿Qué he hecho?
Primero escribí la /etc/environment.rc
script parecida a:
launchctl setenv PATH /Users/halloleo/bin:/usr/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
launchctl setenv JAVA_HOME /usr/local/jdk1.7
launchctl setenv ENVIRONMENT_RC "yes"
A continuación, he creado el plists para launchd
(listados de estos y de otros scripts mencionados en el apéndice abajo). Luego he activado con
$ sudo launchctrl load ...
A continuación, he desactivado el path_helper
de utilidad en el shell de archivo init /etc/
el perfil, de modo que no se sobrescribe el environment.rc
configuración. Y por último me reinicia la máquina.
2. Cuál es el efecto?
Al iniciar el Terminal de las nuevas variables de entorno JAVA_HOME
y ENVIRONMENT_RC
se establecen de acuerdo a environment.rc
, pero se establece la RUTA a
/usr/bin:/bin
Con el fin de asegurarse de que, no bash
archivo init puso en el camino que escribí un pequeño script en python en su lugar (en el apéndice) para mostrar las variables en el entorno actual y que ejecuto esta directamente haciendo doble clic en un Ornitorrinco contenedor. De nuevo en esta se establecen las variables, mientras que la RUTA por defecto del sistema.
Así que ¿por qué no puedo establecer otras variables, pero no la variable PATH? Y ¿cómo puedo solucionar esto de una forma unificada?
Actualización:
La situación es muy desconcertante: La cáscara (bash
al menos) en la Terminal o en Emacs recogerá la RUTA de acceso se establece a través de la launchctl
, pero otras GUI de aplicaciones no hacerlo., por ejemplo, el mencionado mínimo secuencia de comandos de python recta se llama a través de Ornitorrinco no mostrar su ruta de acceso personalizada. E incluso Emacs mismo no conoce la RUTA de acceso correcta: esto Se nota por ejemplo, cuando se emite el comando Emacs M-x ispell-buffer
; la de unix herramienta ispell
que emacs intenta llamar no se si es solo en tu ruta personalizada.
Apéndice
net.halloleo.environment.plist
, el launchd archivo de configuración en /Library/LaunchDaemons/
:
<?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>KeepAlive</key>
<false/>
<key>Label</key>
<string>net.halloleo.environment</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/etc/environment.rc</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/etc/environment.rc</string>
</array>
</dict>
</plist>
net.halloleo.environment-user.plist
, el launchd archivo de configuración en /Library/LaunchAgents/
:
<?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>KeepAlive</key>
<false/>
<key>Label</key>
<string>net.halloleo.environment-user</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/etc/environment.rc</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/etc/environment.rc</string>
</array>
</dict>
</plist>
/etc/profile
, la modificación de bash inicio archivo:
# System-wide .profile for sh(1)
# if [ -x /usr/libexec/path_helper ]; then
# eval `/usr/libexec/path_helper -s`
# fi
if [ "${BASH-no}" != "no" ]; then
[ -r /etc/bashrc ] && . /etc/bashrc
fi
show_environ.py
, la secuencia de comandos de visualización de todas las variables de entorno:
import os
print (os.environ)