【问题标题】:How to access a bash environment variable from within R in emacs-ess如何在 emacs-ess 中从 R 中访问 bash 环境变量
【发布时间】:2012-06-15 20:32:26
【问题描述】:

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

export SETTINGS=/home/user/settings.xml

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

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

如果我在 Emacs (M-x R) 中打开 R,SETTINGS 为空:

Sys.getenv("SETTINGS")
""

我尝试过的:

  1. 将以下内容添加到 .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))
    
  2. 使用M-x term在emacs中打开bash

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

  4. 在 bash 与 emacs 中加载 R 时比较 session("env") 的输出,但除了 (bash = ) 之外没有什么特别突出的:

    > 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. 将 SETTINGS 导出到我可以访问的地方?

【问题讨论】:

  • 你是如何开始 Emacs 的?如果您启动一个 bash shell(在环境中使用 SETTINGS),然后从那里启动 Emacs,它应该可以工作。事实上,似乎父进程没有这个环境变量(从 Gnome shell 或类似的开始?)。
  • @MatthewLundberg 我更新了我的答案(见第 3 点)。从终端打开作品。从应用程序菜单、Gnome-do 或键盘快捷键调用 /usr/bin/emacs23 %F 不会打开。

标签: r bash emacs environment-variables ess


【解决方案1】:

我不了解 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")))

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我的系统是 Ubuntu 和 RedHat;你有什么进一步的建议吗?如何查看 emacs 内部的环境?如果我在 emacs 中使用 M-x term 打开一个 bash 终端,则变量存在。
    【解决方案3】:

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

    export SETTINGS=/home/user/settings.xml
    

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

    【讨论】:

    • 它们可能比 xsesssionrc 更好,因为它们在登录时由 ssh 读取。
    【解决方案4】:

    你可以放

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

    .Rprofile 中作为解决方法。

    【讨论】:

    • 这将是一个合适的解决方法,除了我希望能够在“R --vanilla”模式下访问变量
    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 2014-08-24
    • 2020-09-28
    相关资源
    最近更新 更多