如何在emacs-ess中从R中访问bash环境变量

Abe*_*Abe 7 emacs bash r environment-variables ess

在我的.bashrc中,我有一行:

export SETTINGS=/home/user/settings.xml
Run Code Online (Sandbox Code Playgroud)

如果我在bash中加载R,我可以使用以下Sys.getenv函数访问此变量:

Sys.getenv("SETTINGS")
"/home/user/settings.xml"
Run Code Online (Sandbox Code Playgroud)

如果我在Emacs(Mx R)中打开R,则SETTINGS为空:

Sys.getenv("SETTINGS")
""
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

  1. 将以下内容添加到.emacs,基于 如何使Emacs识别bash环境变量进行编译?

    ;; get environment vars from .bashrc
    (let ((path (shell-command-to-string ". ~/.bashrc; echo -n $SETTINGS")))
      (setenv "SETTINGS" path))
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在emacs中打开bash使用 M-x term

    echo $SETTINGS         # works
    R
    Sys.getenv("SETTINGS") #works
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果我从终端打开emacs,则SETTINGS变量可按预期使用.从"应用程序"菜单打开emacs(使用命令/usr/bin/emacs23 %Femacs)不起作用.

  4. 比较session("env")在bash和emacs中加载R时的输出,但除了(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
    
    Run Code Online (Sandbox Code Playgroud)

我可以吗?

  1. 从emacs-ess中的R中访问SETTINGS
  2. 导出SETTINGS我可以访问它的某个地方?

ele*_*kil 3

我不了解R和自定义环境变量,但我将emacs中的PATH变量设置为与我的bashrc中相同的值。我针对您的问题修改了代码,试一试并告诉我它是否有效。

;; set env variable in Emacs
(getenv "SETTINGS")
(setenv "SETTINGS" "/home/user/settings.xml")
Run Code Online (Sandbox Code Playgroud)

原始代码(对于 PATH)是:

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