2013-07-03 2 views
4

В моей оболочке я сделал: export BLA=foo, а затем я делаю echo $BLA, и я вижу foo, как и ожидалось. Затем я загружаю emacs и делаю M-! для команды оболочки и делаю echo $BLA, и он настроен на что-то еще, bar. Итак, я запускаю M-x setenv и даю его BLA и foo в подсказках, но когда я делаю эхо, я все еще вижу bar. Почему это было бы и как я могу его изменить? Я пытаюсь сделать это для некоторых переменных среды, под которыми я хочу запустить M-x compileКак реально изменить/установить переменные среды из emacs

ответ

6

setenv изменит окружающую среду для процессов запуска emacs после вы установили значение. Запуск дочерних процессов не будет затронут.

Таким образом, сделав (setenv "FOO" "bar"), а затем M-x shell (пока у вас еще нет оболочки), вы получите оболочку с переменной окружения «FOO», установленной в «bar».

+0

'C-u M-x shell' запросит имя буфера, что приведет к легкому запуску окна оболочки 2-го, 3-го и т. Д. Попробуйте оболочку до и после setenv и посмотрите результаты! – assem

1

Ваша оболочка, в которой вы запустили Emacs, передает копию своей среды своему дочернему процессу (Emacs), вот как значение передается из оболочки в Emacs. Любое изменение, которое Emacs выполняет с его унаследованной средой, повлияет только на среду процесса Emacs. Окружение среды Emacs не может влиять на среду оболочки.

Если вам нужно передать информацию обратно оболочки, вы должны использовать различные методы, такие как временные файлы, именованные каналы, сокеты, ...

Если вы просто хотите, чтобы проверить окружение самого Emacs, используйте M-xgetenv посмотреть переменные или использовать M-!echo $BLA. Если это также показывает sth else, тогда у вас, вероятно, есть специальный BLA, который автоматически устанавливается в sth после каждой команды или который вообще не доступен для записи, как RANDOM или аналогичный.

Смежные вопросы