Tener algunos problemas con la PATH
configuración en Emacs que están afectando a mi entorno Haskell:
Estoy usando ZSH, y cuando voy a la línea de comando y llamo echo $PATH
, me devuelve:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
Esto viene de la .zprofile
configuración donde tengo:
# Set the list of directories that Zsh searches for programs.
path=(
~/Library/Haskell/bin
/usr/local/{bin,sbin}
$path
)
Entonces, desde la línea de comando, cuando llamo which cabal
, obtengo correctamente:/Users/g/Library/Haskell/bin/cabal
Cuando inicio Emacs y voy a shell
y llamo which cabal
, obtengo: /usr/bin/cabal
lo que me está causando problemas ya que es una versión diferente.
Cuando inspecciono echo $PATH
desde Emacs shell
, veo:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/g/Library/Haskell/bin:/usr/local/sbin
No tengo idea de cómo PATH
puede ser diferente ...
¿Alguien sabe cómo lograr que mi ZSH
shell y Emacs acuerden lo mismo PATH
? Sospecho que eso es lo que controla desde dónde cabal
se está cargando.
ACTUALIZACIÓN : Ejecutando echo $SHELL
desde impresiones Emacs:/bin/zsh
ACTUALIZACIÓN 2 : Esto está en OSX .
ACTUALIZACIÓN 3 : He intentado usar el módulo exec-path-from-shell y no funciona. Todavía tengo los mismos problemas y, como efecto secundario, estropea los colores de mi tema terminal :(
ACTUALIZACIÓN 4 : He instalado Emacs a través de brew install --cocoa --srgb emacs
y ejecuto emacs que está vinculado de esta manera:
~ ❯❯❯ which emacs
/usr/local/bin/emacs
~ ❯❯❯ l /usr/local/bin/emacs
lrwxr-xr-x 1 g admin 30B 29 Jan 18:34 /usr/local/bin/emacs -> ../Cellar/emacs/24.4/bin/emacs
~ ❯❯❯ l /usr/local/Cellar/emacs/24.4/bin/emacs
-r-xr-xr-x 1 g admin 87B 29 Jan 18:34 /usr/local/Cellar/emacs/24.4/bin/emacs
fuente
chsh...
en el día para cambiar mi shell predeterminado~/.profile
o/etc/profile
luego.~/.zshenv
, que se obtendrán de forma coherente sin embargo, se inicia el shell (interactivo frente a no interactivo). Siexec-path-from-shell
es echar a perder sus colores del tema terminales, se puede establecerexec-path-from-shell-arguments
quenil
antes de llamarexec-path-from-shell-initialize
para asegurarse de que no se está ejecutando las partes interactivas de su configuración zsh.Respuestas:
También puede instalar el paquete exec-path-from-shell y agregar esto a su archivo init:
fuente
Este es un problema de entorno OSX molesto, la
$PATH
aparición en Emacs proviene del/etc/paths
archivo, que luego se agrega con lo que haya configurado en el shell. Agregué/Users/g/Library/Haskell/bin
a la parte superior del/etc/paths
archivo y luego funcionó bien.Entrar en shell y llamar
echo $PATH
a Emacs muestra ahora:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin
Y
cabal
la versión es de hechocabal-install version 1.22.2.0
: D¡¡Gracias a todos!!
fuente
$PATH
OSX .~/.zshenv
. Los cambios allí se reflejan en el CAMINO de Emacsecho export PATH=$PATH > ~/.zshenv
que Emacs loM-x shell
tome en la próxima invocación.Si inicia emacs desde su entorno GUI (gnome, kde, ...), sus scripts de inicio de shell no se incluirán en su entorno. Por lo tanto , no se cargará el
$PATH
que configuró cuidadosamente.zsh
. Los entornos GUI generalmente no los obtienen, aunque pueden cargar su~/.profile
archivo.Puedes intentar agregar esto a tu
.pam_environment
:PATH DEFAULT=${PATH}:/MYHOMEDIR/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin
Deberá reiniciar su sesión de GUI para cargarla.
Este documento puede ayudarlo a obtener su
$PATH
conjunto de variables correctamente:https://help.ubuntu.com/community/EnvironmentVariables#Session-wide_environment_variables
Utilizo el
~/.pam_environment
archivo para administrar las variables de entorno a las que necesito acceder desde mis procesos de shell o emacs.PD: Un comentarista astuto señala que probablemente estés en Mac. No sé cómo configurar su
$PATH
interfaz gráfica de usuario de Mac, pero el punto sigue en pie con respecto a la diferencia entre el entorno de su shell y el entorno de la GUI. La configuración$PATH
de la GUI parece depender de la versión del sistema operativo. Sin embargo, puedes usar:(setenv "PATH" (concat (getenv "PATH") ":/foo/bar"))
en tu
~/.emacs.d/init
si solo quieres una solución que debería funcionar.PPS: si desea ejecutar un shell en emacs, probablemente sea mejor usarlo
ansi-term
que hacerloshell
.fuente
Si alguna parte de la RUTA se pierde, puede agregarla en su ~ / .emacs
Para evitar problemas de RUTA, siempre inicio emacs desde la línea de comandos con la RUTA exportada desde ~ / .bashrc.
fuente
Otra forma de lograr esto es simplemente decirle al shell que es un shell de inicio de sesión para que obtenga todos los archivos correctos. Hago esto para bash configurando
explicit-bash-args
a("--noediting" "--login")
. Parece que el equivalente para zsh sería establecerexplicit-zsh-args
en("-l")
.Entonces en mi
.emacs
:En el tuyo, algo como:
Creo que no
"--noediting"
es necesario, y no parece haber una manera de decirle a zsh sobre esto, pero eso podría ser algo para investigar si esto no funciona tan bien como cabría esperar.fuente
M-x shell-command
.También puede establecer una ruta predeterminada para todo el sistema operativo X guardando, por ejemplo, una lista de propiedades como esta como
~/Library/LaunchAgents/my.startup.plist
:La nueva ruta debe mostrarse en shells, Emacs y otras aplicaciones después de cerrar sesión y volver a iniciarla.
Este método no cambia la ruta en las aplicaciones que se abren como elementos de inicio de sesión o cuando las aplicaciones se vuelven a abrir al iniciar sesión después de un cierre forzado. Si tiene Emacs, una aplicación de terminal u otras aplicaciones donde desea cambiar la ruta en los elementos de inicio de sesión, deberá eliminarlos.
En 10.9 y anteriores también se puede añadir una línea como la siguiente
/etc/launchd.conf
:Sin embargo, el soporte para
/etc/launchd.conf
fue eliminado en 10.10.fuente