32

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

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

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

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

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

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

该文件包含动态 ID 的位置

那么,如何将“动态”环境变量插入/etc/environment?或者,我怎样才能让 R 读取环境变量/.bashrc

任何正确方向的提示将不胜感激!

4

3 回答 3

34

你想要Sys.getenv()Sys.getenv("PATH"),说。

或者对于你的例子,试试

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

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

于 2012-09-06T00:27:31.197 回答
16

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

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

要为 R 设置变量,.Renviron请在您的主目录中创建一个文件并在那里写入

MYDIRECTORY="/home/wherever"

重新启动 R 后,您将能够访问此变量

Sys.getenv("MYDIRECTORY")
于 2016-03-10T08:03:49.907 回答
8

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

> readRenviron(".env")

然后访问特定的变量

> Sys.getenv("RDS_UID")

它工作得很好。

于 2019-05-22T18:16:10.350 回答