Mi ~/etc/path
apariencia es la siguiente:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
El problema:
Cuando escribo echo $PATH
en la terminal, me devuelve:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Y esto persiste para cada aplicación iniciada en la terminal. Por ejemplo, si escribo emacs
y luego hago:
M-x getenv PATH
Mi salida es:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Sin embargo, si inicio emacs usando el launchpad en lugar de la terminal y una vez más ingreso M-x getenv PATH
, mi salida es /usr/bin:/bin:/usr/sbin:/sbin
.
Como puede ver , falta mi cambio a ~/etc/path
, que fue la adición de ./usr/local/bin
Otro ejemplo:
Uso un complemento de Firefox llamado vimperator que emula la funcionalidad vim en Firefox. Tiene una función que permite al usuario editar la entrada de la página web en vim. Sin embargo, esto no parece funcionar en OS X. Por una corazonada, escribo el comando !echo $PATH
en vimperator y veo lo siguiente: /usr/bin:/bin:/usr/sbin:/sbin
. Por supuesto, dado que el enlace simbólico llamado gvim
, que apunta a macvim
, fue creado y colocado /usr/local/bin
por brew, este comportamiento tiene sentido. Lo que no entiendo es por qué PATH
se lee así.
Soluciones que he probado:
EDITAR (como lo solicitó el comentario ahora eliminado):
usando sysctl user.cs_path
en la terminal aparece:
user.cs_path: /usr/bin:/bin:/usr/sbin:/sbin
El loginwindow
proceso establece el entorno de un usuario. Establece las variables TMPDIR y PATH, consulta los Servicios de Directorio y configura SHELL HOME USER LOGNAME. PATH se establece en a /usr/bin:/bin:/usr/sbin:/sbin
menos que sea modificado por launchd (en las versiones más actuales de OS X). Esta es la variable PATH disponible para los procesos del usuario a menos que sea modificada por ese proceso en particular ( cron
como ejemplo, establece PATH en /bin:/usr/bin
).
Las aplicaciones de emulador de terminal inician su shell como un shell de inicio de sesión, por lo que la RUTA se modifica al leer los distintos archivos de inicio de shell. Cualquier proceso iniciado por su shell ahora hereda la nueva variable PATH. Otras aplicaciones que usan un shell no leen ningún archivo de configuración del shell y usan las variables de entorno disponibles en el entorno actual. Una aplicación puede modificar el entorno utilizando la LSEnvironment
clave en su archivo Info.plist
.
A partir de Yosemite, puede cambiar la variable PATH de la siguiente forma.
sudo launchctl config user path <path>
en su caso, desea /usr/local/bin al frente de la ruta.
sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
reboot
su sistema y la nueva RUTA serán establecidas por loginwindow
.
Ejecuta esto:
launchctl setenv PATH "$PATH"
EDITAR : Eso ya no funciona. Use esto con Bash en su lugar:
CURRENT="$(/usr/libexec/PlistBuddy -c "Print PATH" ~/.MacOSX/environment.plist)"
/usr/libexec/PlistBuddy -c "Set PATH $CURRENT:/your/path/here:/another/path/maybe" ~/.MacOSX/environment.plist
Luego cierre sesión y vuelva a iniciar sesión.
Nota : es posible que desee reemplazar $CURRENT:/your/path/here:/another/path/maybe
solo con una lista de rutas como :/your/path/here:/another/path/maybe
, pero esa es una mala idea porque borrará todas las rutas ya almacenadas.
Esto utiliza variables de entorno de sesión de usuario .
/usr/bin:/bin:/usr/sbin:/sbin
en Eclipse, Vimperator (firefox) y Emacs. Lo extraño es que, si uso la opción para ejecutar un script de shell en Emacs o Vimperator, la ejecución echo $PATH
me da /usr/bin:/bin:/usr/sbin:/sbin
. Sin embargo, ejecutar launchctl getenv PATH
produce /usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
; No sé cómo ejecutar un script de shell en Eclipse. Reinicié después de hacer los cambios en mis archivos de puntos, por supuesto.echo $PATH
en la terminal.PATH
variable, pero aparentemente eso ya no funciona. Actualicé mi respuesta con una nueva solución.
globofabuloso