我在Amazon EC2上运行RStudio Server(0.99.879),最近更新到Microsoft R Open 3.2.3(以前称为Revolution R)。所有软件都在Ubuntu 14.04上运行。
由于我希望所有用户都能在所有shell会话中使用我的亚马逊访问密钥,因此我将其放在/etc/environment
AWS_ACCESS_KEY=123
中。
RStudio在用户rstudio
下运行,我通过在RStudio中执行system("whoami")
来检查。在切换到Microsoft R Open [MRO]之前,system("echo $AWS_ACCESS_KEY")
(从RStudio执行)给出了正确的结果123
。但现在它返回一个空字符串。
但是,如果我通过rstudio
切换到控制台中的用户su - rstudio
并从 shell 启动MRO,system("echo $AWS_ACCESS_KEY")
会给出正确的结果,困惑我。
好像只有RStudio 一起与MRO一起使R忘记etc/environment
中定义的环境变量。
你们知道这种奇怪行为的原因是什么?有关可能修复的指示吗?
我真的希望将密钥保存在一个地方(/etc/environment
)并且绝对不会在我的R代码中硬编码。我能想到的一个解决方法是从R中读取/etc/environment
,提取AWS_ACCESS_KEY
并通过Sys.setenv()
进行设置。但这主要是一个黑客,我想了解真正的问题是什么......
R_HOME_DIR
中的/usr/bin/R
变量更改为R_HOME_DIR=/usr/lib64/MRO-3.2.3/R-3.2.3/lib/R
,因为之前确定主目录的代码不起作用与MRO。
答案 0 :(得分:2)
请记住,RStudio Server(开源版)不会在登录shell下运行用户会话,这一点非常重要。因此,当您su - rstudio
时,您将获得在bash启动时初始化的shell变量。
值得庆幸的是,有一个非常简单的方法:符号链接R_HOME/etc/Renviron.site
(请参阅R initialization)到/etc/environment
。 R的环境文件格式与Linux相同(即KEY = VALUE),因此您可以为R和bash提供相同的环境初始化列表。