Этот вопрос задавался в superuser is-there-a-way-re-re-re -load-environment-in-emacs , но никакого хорошего решения не было дано.
Я использую EmacsClient с часто более чем 30 открытыми буферами, если я изменяю переменную окружения в оболочке, мне нужно выйти из EmacsClient (и заново открыть все буферы), или я должен вручную установить переменную окружения также в Emacs. Меня раздражает, что я не могу легко обновлять переменные окружения в Emacs. Какие-либо предложения?
emacsclient
environment
Хокон Хагланд
источник
источник
Ответы:
exec-path-from-shell предоставляет
exec-path-from-shell-copy-env
команду, которая позволяет вам копировать значение переменных среды в сеансы Emacs. Например, такжеM-x exec-path-from-shell-copy-env RET FOO
устанавливает значение$FOO
в Emacs.Обратите внимание, что
exec-path-from-shell-copy-env
создается новая оболочка для извлечения значения переменной среды. Следовательно, он будет работать только для переменных, которые вы установили в своих файлах конфигурации оболочки (например.bashrc
), но не для переменных, установленных только во время сеанса оболочки сexport
. Извлечение этих переменных, как правило, невозможно без запутанных взломов, которые проверяют/proc/
или подобные API для запуска процессов.источник
В качестве обходного пути можно использовать следующее (Linux, Bash):
printenv -0 > env.txt
из окна терминала Bash,Обновить
Я выясняю, что это можно сделать более элегантно, используя
--eval
опциюemacsclient
команды: Определить скрипт Bashupdate_emacs_env
:где имя
server_name
вашего сервера Emacs иmy-update-env
функция, определенная вашим~/.emacs
файлом:Теперь вы можете просто набрать
update_emacs_env
в командной строке оболочки, чтобы обновить переменные среды Emacs.источник
source
.bashrc, .bash_profile и т. Д.?export VAR=value
Я использовал это:
Позволяет экспортировать именованную переменную, например:
источник