Tener algunos problemas con la PATHconfiguració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 .zprofileconfiguració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 shelly llamo which cabal, obtengo: /usr/bin/caballo que me está causando problemas ya que es una versión diferente.
Cuando inspecciono echo $PATHdesde 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 PATHpuede ser diferente ...
¿Alguien sabe cómo lograr que mi ZSHshell y Emacs acuerden lo mismo PATH? Sospecho que eso es lo que controla desde dónde cabalse está cargando.
ACTUALIZACIÓN : Ejecutando echo $SHELLdesde 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 emacsy 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~/.profileo/etc/profileluego.~/.zshenv, que se obtendrán de forma coherente sin embargo, se inicia el shell (interactivo frente a no interactivo). Siexec-path-from-shelles echar a perder sus colores del tema terminales, se puede establecerexec-path-from-shell-argumentsquenilantes de llamarexec-path-from-shell-initializepara 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
$PATHaparición en Emacs proviene del/etc/pathsarchivo, que luego se agrega con lo que haya configurado en el shell. Agregué/Users/g/Library/Haskell/bina la parte superior del/etc/pathsarchivo y luego funcionó bien.Entrar en shell y llamar
echo $PATHa Emacs muestra ahora:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbinY
caballa versión es de hechocabal-install version 1.22.2.0: D¡¡Gracias a todos!!
fuente
$PATHOSX .~/.zshenv. Los cambios allí se reflejan en el CAMINO de Emacsecho export PATH=$PATH > ~/.zshenvque Emacs loM-x shelltome 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
$PATHque configuró cuidadosamente.zsh. Los entornos GUI generalmente no los obtienen, aunque pueden cargar su~/.profilearchivo.Puedes intentar agregar esto a tu
.pam_environment:PATH DEFAULT=${PATH}:/MYHOMEDIR/Library/Haskell/bin:/usr/local/bin:/usr/local/sbinDeberá reiniciar su sesión de GUI para cargarla.
Este documento puede ayudarlo a obtener su
$PATHconjunto de variables correctamente:https://help.ubuntu.com/community/EnvironmentVariables#Session-wide_environment_variables
Utilizo el
~/.pam_environmentarchivo 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
$PATHinterfaz 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$PATHde 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/initsi solo quieres una solución que debería funcionar.PPS: si desea ejecutar un shell en emacs, probablemente sea mejor usarlo
ansi-termque 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-argsa("--noediting" "--login"). Parece que el equivalente para zsh sería establecerexplicit-zsh-argsen("-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.conffue eliminado en 10.10.fuente