Как получить доступ к переменной окружения bash из R в emacs-ess

В моем .bashrc у меня есть строка:

export SETTINGS=/home/user/settings.xml

Если я загружаю R в Bash, я могу получить доступ к этой переменной с помощьюSys.getenv функция:

Sys.getenv("SETTINGS")
"/home/user/settings.xml"

Если я открою R в Emacs (M-x R), SETTINGS будет пустым:

Sys.getenv("SETTINGS")
""

Что я пробовал:

adding the following to .emacs, based on How do I make Emacs recognize bash environment variables for compilation?

;; get environment vars from .bashrc
(let ((path (shell-command-to-string ". ~/.bashrc; echo -n $SETTINGS")))
  (setenv "SETTINGS" path))

opening up bash in emacs using M-x term

echo $SETTINGS         # works
R
Sys.getenv("SETTINGS") #works

If I open emacs from the terminal, the SETTINGS variable is available as expected. Opening emacs from the Applications menu (with either the command /usr/bin/emacs23 %F or emacs) does not work.

comparing output from session("env") when loading R in bash vs emacs, but nothing stands out other than (bash = <, emacs = >):

> INSIDE_EMACS=23.3.1,comint
6d5
< SETTINGS=/home/user/settings.xml
9c8
< SHLVL=1
> SHLVL=0
14a14
> PAGER=cat
16d15
< PAGER=/usr/bin/pager
19d17
< COLORTERM=gnome-terminal
25c23
< WINDOWID=14680069
> DESKTOP_AUTOSTART_ID=1020ce948b944a88113395253627645060000001863000
< TERM=xterm
> TERM=dumb

Могу ли я либо

access SETTINGS from within R in emacs-ess export SETTINGS somewhere that I can access it?
 Abe13 июн. 2012 г., 16:01
@ MatthewLundberg Я обновил свой ответ (см. Пункт № 3). Открытие из терминала работает. Открытие со звонками на/usr/bin/emacs23 %F из меню приложений, Gnome-do или сочетания клавиш нет.
 Matthew Lundberg13 июн. 2012 г., 03:39
Как вы начинаете Emacs? Если вы запустите оболочку bash (с настройками в среде) и запустите Emacs оттуда, она должна работать. Похоже, что родительский процесс не имеет этой переменной среды (начиная с оболочки Gnome или чего-то подобного?).

Ответы на вопрос(4)

Вы можете положить

SETTINGS <- "/home/user/settings.xml"

в.Rprofile как обходной путь.

 Abe13 июн. 2012 г., 15:47
Это было бы подходящим обходным путем, за исключением того, что я хочу иметь возможность доступа к переменной в & quot; R --vanilla & quot; Режим

.. Попробуйте добавить

export SETTINGS=/home/user/settings.xml

в.xsessionrc или.gnomerc (если вы используете гном). Эти файлы загружаются при запуске X сессии.

 14 июн. 2012 г., 09:39
Они, вероятно, лучше, чем xsesssionrc, потому что они читаются при входе в систему по ssh.
 Abe13 июн. 2012 г., 22:17
~/.profile а также/etc/profile также работа

тогда сеанс R будет иметь те же переменные окружения, что и emacs. Поэтому вы должны сначала убедиться, что вы запускаете emacs таким образом, чтобы его окружение содержало вашу переменную SETTINGS. Таким образом, ваш R-сеанс, который вы запускаете внутри emacs, также будет иметь SETTINGS в своем окружении. Как именно этого добиться, зависит от вашей системы.

 Abe13 июн. 2012 г., 15:49
Мои системы - Ubuntu и RedHat; у вас есть еще советы? Как я могу увидеть среду внутри Emacs? если я открою терминал Bash, используяM-x term в Emacs переменные присутствуют.
Решение Вопроса

но я установил переменную PATH в emacs на то же значение, что и в моем bashrc. Я изменил свой код для вашей проблемы, сделайте попытку и дайте мне знать, если он работает.

;; set env variable in Emacs
(getenv "SETTINGS")
(setenv "SETTINGS" "/home/user/settings.xml")

Исходный код (для PATH):

;; Emacs has its own path variable
(getenv "PATH")
 (setenv "PATH"
(concat
 "/usr/local/texlive/2011/bin/x86_64-linux" ":"
(getenv "PATH")))

Ваш ответ на вопрос