Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to access a bash environment variable from within R in emacs-ess

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:

  1. 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))
    
  2. opening up bash in emacs using M-x term

    echo $SETTINGS         # works
    R
    Sys.getenv("SETTINGS") #works
    
  3. 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.

  4. 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

  1. access SETTINGS from within R in emacs-ess
  2. export SETTINGS somewhere that I can access it?
like image 312
Abe Avatar asked Jun 12 '12 21:06

Abe


2 Answers

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")))
like image 93
elemakil Avatar answered Oct 20 '22 05:10

elemakil


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.

like image 37
Rémi Avatar answered Oct 20 '22 03:10

Rémi