RStudio服务器和Microsoft R open:缺少环境变量
我在AmazonEC2上运行RStudio服务器(0.99.879),最近更新到MicrosoftR Open3.2.3(以前是Revolution R)。所有软件都在Ubuntu 14.04上运行 因为我想在所有shell会话中为所有用户提供我的Amazon访问密钥,所以我将它们放在RStudio服务器和Microsoft R open:缺少环境变量,r,environment-variables,ubuntu-14.04,rstudio,revolution-r,R,Environment Variables,Ubuntu 14.04,Rstudio,Revolution R,我在AmazonEC2上运行RStudio服务器(0.99.879),最近更新到MicrosoftR Open3.2.3(以前是Revolution R)。所有软件都在Ubuntu 14.04上运行 因为我想在所有shell会话中为所有用户提供我的Amazon访问密钥,所以我将它们放在/etc/environment中,比如AWS\u access\u KEY=123 RStudio在用户RStudio下运行,我通过在RStudio中执行system(“whoami”)检查了该用户。在切换到Mi
/etc/environment
中,比如AWS\u access\u KEY=123
RStudio在用户RStudio
下运行,我通过在RStudio中执行system(“whoami”)
检查了该用户。在切换到Microsoft R Open[MRO]之前,系统(“echo$AWS\u ACCESS\u KEY”)
(从RStudio执行)给出了正确的结果123
。但现在它返回一个空字符串
但是,如果我通过su-rstudio
在控制台中切换到userrstudio
并从shell启动MRO,系统(“echo$AWS\u ACCESS\u KEY”)
会给出正确的结果,这让我非常困惑
似乎只有RStudio和MRO才能使R忘记在etc/environment
中定义的环境变量
你们知道这种奇怪行为的原因吗?有可能修复的指针吗?
我真的很想把钥匙放在一个地方(即/etc/environment
),而且绝对不要硬编码在我的R代码中。我能想到的一个修复方法是从R中读取/etc/environment
,提取AWS\u ACCESS\u键
,并通过Sys.setenv()
进行设置。但这主要只是一个黑客,我想了解真正的问题是什么
顺便说一句:也许我应该提到,我必须将R开始脚本中的
R_HOME_DIR
变量/usr/bin/R
更改为R_HOME_DIR=/usr/lib64/MRO-3.2.3/R-3.2.3/lib/R
,因为之前确定主目录的代码不适用于MRO。请记住,RStudio服务器(开源版)不在登录shell下运行用户会话。因此,当您su-rstudio
时,您将获得bash启动时初始化的shell变量
谢天谢地,有一个非常简单的方法可以解决这个问题:symlink
R\u HOME/etc/Renviron.site
(请参阅)到/etc/environment
。R的环境文件与Linux的格式相同(即KEY=VALUE),因此您可以向R和bash提供相同的环境初始值设定项列表。太好了!事实上,我认为这个问题非常具体,不太可能得到答案。但今天似乎是我的幸运日。:)既然常规R版本一切正常,我想这是一场革命(或微软)已经改变了启动程序中的某些内容。无论如何,为了防止有人感兴趣,这里是创建sudo ln-s/etc/environment/usr/lib64/MRO-3.2.3/R-3.2.3/lib/R/etc/Renviron.site链接的命令。人们可能不得不将最后一个路径更改为自己的特定MRO安装路径,但是.OMG完全忘记了我已经在R\u HOME/etc/Rprofile.site
中为常规R编写了读取和处理/etc/environment
的代码。所以,这个谜题就解决了:MRO还有另一个Rprofile.site
文件,我没有在其中设置这些变量。但我会保留@Jonathan的解决方案,因为它更干净、更简单。