2012-06-12 128 views
6

在我的.bashrc,我也行:如何從R內訪問bash的環境變量在Emacs-ESS

export SETTINGS=/home/user/settings.xml 

如果我在bash負載R,我可以用Sys.getenv函數訪問這個變量:

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

如果我打開了在Emacs(MX R)R,設置爲空:

Sys.getenv("SETTINGS") 
"" 

我曾嘗試:

  1. 添加使用M-x term

    echo $SETTINGS   # works 
    R 
    Sys.getenv("SETTINGS") #works 
    
  2. 如果我從終端打開的emacs,設置將下列到的.emacs,基於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)) 
    
  3. 開放的bash在emacs的變量按預期可用。從「應用程序」菜單(使用命令/usr/bin/emacs23 %Femacs)打開emacs不起作用。在bash VS emacs的加載R'當從session("env")

  4. 比較輸出,但只不過是突出其他(慶典= <,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 
    

我可以要麼

  1. 在emacs-ess中從R中訪問SETTINGS
  2. export SETTINGS我可以訪問它的某個地方?
+0

你是如何啓動Emacs的?如果你啓動一個bash shell(在環境中使用SETTINGS),並從那裏啓動Emacs,它應該可以工作。實際上,似乎父進程沒有這個環境變量(從Gnome shell開始或者這樣?)。 –

+0

@MatthewLundberg我更新了我的答案(見點#3)。從終端工程開放。從應用程序菜單中調用'/ usr/bin/emacs23%F'打開,Gnome-do或鍵盤快捷鍵不打開。 – Abe

回答

3

我不知道R和自定義的環境變量,不過我現在在Emacs爲相同的值PATH變量在我的.bashrc。我修改了我的代碼到你的問題,給它一個鏡頭,讓我知道它是否工作。 (對於PATH)

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

原始代碼是:

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

如果你開始你在Emacs R對話,那麼R對話將具有相同的環境變量emacs的。所以你應該首先確保你啓動emacs的方式是它的環境包含你的SETTINGS變量。那樣的話,你開始在emacs裏的R會話也會在其環境中使用SETTINGS。如何實現這一點取決於你的系統。

+0

我的系統是Ubuntu和RedHat;你有任何進一步的建議嗎?我如何看到emacs內部的環境?如果我在emacs中使用'M-x term'打開一個bash終端,則會顯示這些變量。 – Abe

3

當xsession啓動時,可能無法讀取.bashrc。嘗試在.xsessionrc.gnomerc加入

export SETTINGS=/home/user/settings.xml 

(如果使用的是GNOME)。這些文件在X會話啓動時加載。

+0

'〜/ .profile'和'/ etc/profile'也可以工作 – Abe

+0

它們可能比xsesssionrc更好,因爲它們是通過ssh登錄時讀取的。 –

0

你可以把

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

.Rprofile作爲一個變通。

+0

這將是一個合適的解決方法,但我希望能夠訪問「R --vanilla」模式中的變量 – Abe