在 bash 和 R 之间共享配置变量

Sharing config variables between bash and R

我需要在各种 R 和 bash 程序之间共享配置变量。他们都共享各种资源,尤其是 GRASS 数据库。

我首先创建了一个 bash 脚本来设置 shell 变量,然后运行 ​​R 程序。这样 R 对 shell 变量视而不见:

$ cat testVars.R
Sys.getenv(c("WDIR","GDIR"))
$ cat testVars.sh
#!/bin/sh
WDIR="/Work/Project/"
GDIR=$WDIR"GRASSDATA" 
Rscript testVars.R
$ ./testVars.sh
WDIR GDIR 
  ""   "" 

然后我尝试在 R 中使用 readRenviron 函数,认为它可以用于获取 bash 文件设置变量。但是,这会导致不同的问题,R 无法像 bash 那样替换和连接变量:

$ cat testVars.R
readRenviron("./testVars.sh")
Sys.getenv(c("WDIR","GDIR"))
$ cat testVars.sh
#!/bin/sh
WDIR="/Work/Project/"
GDIR=$WDIR"GRASSDATA" 
$ Rscript testVars.R
            WDIR             GDIR 
"/Work/Project/" "$WDIRGRASSDATA"  

两种语言都在一定程度上支持 YAML,但它受到 same lack of replacement and concatenation facilities 的影响。例如,使用 YAML,我需要在配置文件中无数次重复工作目录。

所以这就是我要寻找的:一种配置格式,可以同时被 R 和 bash 使用,并且还允许变量连接。

我认为您只需要 export bash 中的变量,使 R 可以访问它们。

$ export TEST_VAR=42
$ Rscript -e "Sys.getenv('TEST_VAR')"
[1] "42"

然后可以用paste()paste0()处理连接。