In my .bashrc, I have the line:
export SETTINGS=/home/user/settings.xml
If I load R in bash, I can access this variable using the Sys.getenv
function:
Sys.getenv("SETTINGS")
"/home/user/settings.xml"
If I open up R in Emacs (M-x R), SETTINGS is empty:
Sys.getenv("SETTINGS")
""
What I have tried:
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
oremacs
) 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
Can I either
- access SETTINGS from within R in emacs-ess
- export SETTINGS somewhere that I can access it?
I don't know about R and self-defined environment variables, but I set the PATH variable in emacs to the same value as in my bashrc. I modified my code to your problem, give it a shot and let me know if it works.
;; set env variable in Emacs
(getenv "SETTINGS")
(setenv "SETTINGS" "/home/user/settings.xml")
Original code (for PATH) is:
;; Emacs has its own path variable
(getenv "PATH")
(setenv "PATH"
(concat
"/usr/local/texlive/2011/bin/x86_64-linux" ":"
(getenv "PATH")))
the .bashrc might not be read when the xsession is started. Try adding
export SETTINGS=/home/user/settings.xml
in the .xsessionrc
or the .gnomerc
(if you are using gnome). Those file are loaded at startup for the X session.
If you start you an R session inside emacs, then the R session will have the same environment variables as emacs. So you should first make sure that you start emacs in such a way that its environment contains your SETTINGS variable. That way, your R session, which you start inside emacs, will have SETTINGS also in its environment. How exactly to achieve this depends on your system.
You can put
SETTINGS <- "/home/user/settings.xml"
in .Rprofile
as a work-around.
来源:https://stackoverflow.com/questions/11005478/how-to-access-a-bash-environment-variable-from-within-r-in-emacs-ess