我在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
?
非常感谢任何正确方向的小贴士!
答案 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")
效果很好。