Вы можете попробовать добавить что-то похожее на .emacs
:
(let ((path (shell-command-to-string ". ~/.bashrc; echo -n $PATH")))
(setenv "PATH" path)
(setq exec-path
(append
(split-string-and-unquote path ":")
exec-path)))
В зависимости от того, установлены ли переменные env в .bash_profile
или .bashrc
, вам может потребоваться немного изменить этот фрагмент. Пример приведен для переменной PATH
, которая является немного более особенной (поскольку вы также должны установить exec-path
в Emacs), но может быть расширена для работы с произвольными переменными - у вас может быть список переменных, которые имеют быть прочитанным из .bashrc
и установленным в Emacs.
Я не уверен, используете ли вы OS X или GNU / Linux. Запуск Emacs из строки меню графического интерфейса в Linux обычно приводит к тому, что Emacs не имеет тот же PATH
, что и тот, который запускается из командной строки. Эта проблема восходит к первым xdm
сценариям Xsession, и, хотя их довольно легко исправить (в основном используется сценарий Xsessionwrapper
, который выполняет exec $SHELL -c Xsession
, поэтому оболочка запускается до запуска пользовательского Xsession), никто не потрудился сделать это в течение очень долгого времени (и я сомневаюсь, что кто-нибудь будет). Насколько я знаю, проблема присутствует даже в потомках модера xdm, таких как kdm
и gdm
.
В OS X обработка переменных env - это еще одна проблема, и чтобы получить переменные ENV, вам, как правило, приходится запускать Emacs из командной строки, например, /Applications/Emacs.app/Contents/MacOS/Emacs
или играть с ~/.MacOSX/environment.plist
. Приведенный фрагмент кода должен охватывать вас в обоих случаях.
Обновление
Недавно этот процесс был упрощен расширением exec-path-from-shell . Он устанавливает emacs $PATH
более или менее таким же образом, но использование расширения обычно предпочтительнее взлома решения самостоятельно.