El terminal de forma nativa en Mac, es decir, generado a través de Spotlight o Launchpad, adopta las variables de entorno deseadas, incluida la personalización ~/.bash_profile
. Pero cuando corro Emacs ( Emacs.app
tomado de Emacs para Mac OS X ) y la cáscara desove dentro de él (usando shell
, eshell
o term
), las conchas no se adoptan las mismas variables de entorno como se mencionó anteriormente.
Me doy cuenta de que el shell adopta su entorno del proceso que lo inicia y es por esto que los valores del entorno del shell varían de la misma manera que los de Emac (por ejemplo (getenv "PATH")
)
Aventurándome dentro del contenido de Terminal.app
y Emacs.app
no tuve suerte.
¿Cómo puedo obtener automáticamente la misma variable de entorno que obtengo Terminal.app
en el shell generado dentro de Emacs? Y no prefiero iniciar Emacs desde la terminal.
(Me doy cuenta de que esto es demasiado MacOSX-ish y las respuestas podrían proponer soluciones / ajustes que están totalmente fuera de Emacs. Pero la pregunta concierne a Emacs, por lo tanto, elegí este sitio)
fuente
~/.bash_profile
se lee correctamente cuando ejecutoEmacs.app
así/Applications/Emacs.app/Contents/MacOS/Emacs . &
usandoTerminal.app
.Respuestas:
Recientemente comencé a usar emacs fuera del terminal, lo que me estaba causando algunos problemas de RUTA. Intenté configurarlo agregando
(getenv "PATH")
a mi ruta ejecutiva, entre otras cosas que finalmente nunca funcionaron.Terminé instalando el paquete exec-path-from-shell a través de melpa. Funciona utilizando su
$SHELL
variable de entorno para pedirle a su shell que imprima$PATH
y copie el resultado.Editar: Aquí está el código que uso
fuente
Dado el título real aquí "¿Cómo hacer que el terminal / shell generado dentro de Emacs que se ejecuta en una Mac herede las variables de entorno del terminal nativo?" no puede, ya que Emacs no tendrá Terminal.app como un súper proceso en ningún nivel, por lo que Emacs no puede heredar nada del shell en Terminal.app. Debe hacer que el entorno sea el mismo al obtener los mismos archivos.
Sobre la base de esta respuesta en AskDifferent
Debe tener en cuenta cuáles son los archivos de inicio para bash. ~ / .bash_profile se lee en un shell de inicio de sesión ~ / .bashrc cuando se inicia otro shell.
Cocoa Emacs es una GUI y cuando se ejecuta se ejecuta en un subproceso donde nada ha ejecutado un shell de inicio de sesión, por lo que en su entorno no hay nada que haya obtenido ~ / .bash_profile. Emacs iniciará un shell sin inicio de sesión, por lo que se leerá cualquier cosa en ~ / .bashrc.
Este tipo de cosas es la razón por la cual se recomienda en el manual de bash tener esto en ~ /, bash_profile
y pon la configuración de tu entorno en ~ / .bashrc
En cuanto a por qué /Applications/Emacs.app/Contents/MacOS/Emacs. trabaja en la terminal. El valor predeterminado de Terminal.app es ejecutar un shell en modo de inicio de sesión, de modo que el shell ha obtenido ~ / .bash_profile y emacs es un subproceso de ese shell y, por lo tanto, hereda su entorno. Entonces, en este caso, usted hereda del shell en Terminal.app
Tenga en cuenta que X11 difiere a medida que lo ejecuta desde un shell para que el shell tenga variables de entorno ya que ese shell se inicia como un inicio de sesión.
fuente
Como dijo Mark, Terminal e iTerm 2 invocan shells como shells de inicio de sesión de forma predeterminada, para que Bash lea
~/.bash_profile
pero no~/.bashrc
,M-x shell
eM-x term
invoque shells como shells que no son de inicio de sesión, para que Bash lea~/.bashrc
pero no~/.bash_profile
. O bien añadir. ~/.bash_profile
a~/.bashrc
y seguir usando~/.bash_profile
como archivo de configuración Bash, o añadir. ~/.bashrc
a~/.bash_profile
y comenzar a usar~/.bashrc
como archivo de configuración Bash.Para hacer
shell-command
yshell-command-on-region
leer~/.bash_profile
, agregue-l
ashell-command-switch
:Puede establecer una ruta predeterminada amplia de OS X guardando, por ejemplo, una lista de propiedades como esta como
~/Library/LaunchAgents/startup.plist
:La nueva ruta debe mostrarse en las aplicaciones de terminal, 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 que 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.
fuente