7

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

export SETTINGS=/home/user/settings.xml

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

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

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

Sys.getenv("SETTINGS")
""

我试过的:

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

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

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

  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
    

我也可以吗

  1. 在 emacs-ess 中从 R 中访问 SETTINGS
  2. 将设置导出到我可以访问的地方?
4

4 回答 4

3

我不知道 R 和自定义环境变量,但我将 emacs 中的 PATH 变量设置为与我的 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")))
于 2012-06-12T22:43:52.527 回答
3

启动 xsession 时可能无法读取 .bashrc。尝试添加

export SETTINGS=/home/user/settings.xml

.xsessionrc或 中.gnomerc(如果您使用的是 gnome)。这些文件在 X 会话启动时加载。

于 2012-06-13T02:47:13.677 回答
0

如果您在 emacs 中启动 R 会话,则 R 会话将具有与 emacs 相同的环境变量。所以你应该首先确保你启动 emacs 时它的环境包含你的 SETTINGS 变量。这样,您在 emacs 中启动的 R 会话也将在其环境中具有 SETTINGS。究竟如何实现这一点取决于您的系统。

于 2012-06-12T23:58:38.493 回答
0

你可以把

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

作为.Rprofile一种解决方法。

于 2012-06-13T03:05:04.737 回答