如何让R读取我的环境变量?

时间:2012-09-06 00:16:46

标签: linux r ubuntu amazon-ec2 environment-variables

我在EC2现场实例上运行R并且我需要R来终止实例并在脚本运行后取消现场请求。

为此我已将“请求ID”设置为/.bashrc中的环境变量,我的计划是在脚本准备就绪后将以下代码调用到R中

system("ec2-cancel-spot-instance-requests $SIR")

我遇到的问题是R没有“看到”我从外部R键入env时看到的相同环境变量,因此命令无效。

我已经检查过,如果我将环境变量设置为/etc/environment,则R能够看到这些变量,但这是另一个问题。由于这些变量是动态的(每次创建专色实例时实例ID和请求ID都不同),我运行的脚本以以下形式创建它们:

export SIR=`cat /etc/ec2_instance_spot_id.txt`

该文件包含动态ID

那么,如何将“动态”环境变量插入/etc/environment?或者,我如何让R在/.bashrc

读取环境变量

非常感谢任何正确方向的小贴士!

3 个答案:

答案 0 :(得分:17)

您希望Sys.getenv()Sys.getenv("PATH")一样,比如说。

或者您的示例,请尝试

SIR <- Sys.getenv("SIR")   
system(paste("ec2-cancel-spot-instance-requests",  SIR))

至于在启动时设置变量,请参阅help(Startup)以了解~/.Renvironment

答案 1 :(得分:9)

使用Sys.getenv()可以看到当前环境中列出的所有变量。

但是,它们与当前shell中使用的不同,例如.profile中指定的。

要为R设置变量,请在主目录中创建.Renviron文件并写入

MYDIRECTORY="/home/wherever"

重新启动R后,您将能够使用

访问此变量
Sys.getenv("MYDIRECTORY")

答案 2 :(得分:0)

我对R很陌生,但是我的方法是这样的:我将项目级环境变量存储在.env文件中。为了使其在R中可访问,我使用了

> readRenviron(".env")

然后访问特定变量

> Sys.getenv("RDS_UID")

效果很好。