在 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()
处理连接。
我需要在各种 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()
处理连接。