r或bash命令线长度限制



我正在开发一个bash程序,该程序执行rmarkdown模板转换为HTML文档。

此r oneliner命令看起来像:

R -e 'library(rmarkdown) ; rmarkdown::render( "template.Rmd", "html_document", output_file = "report.html", output_dir = "'${OUTDIR}'", params = list( param1 = "'${PARAM1}'", param2 = "'${PARAM2}'", ... ) )

我有一个很长的参数列表,假设10来解释问题,并且R或Bash似乎具有命令行长度限制。

当我使用10个参数执行R Oneliner时,我会获得这样的错误消息:

WARNING: '-e library(rmarkdown)~+~;~+~rmarkdown::render(~+~"template.Rmd",~+~"html_document",~+~output_file~+~=~+~"report.html",~+~output_dir~+~=~+~"output/",~+~params~+~=~+~list(~+~param1~+~=~+~"param2", ...
Fatal error: you must specify '--save', '--no-save' or '--vanilla'

当我使用9个参数执行R Oneliner时,就可以(我尝试了不同的组合来验证问题不是最后一个参数(。

当我执行具有10个参数的R Oneliner时,但是在其中删除所有空间时,也可以,所以我猜R或Bash使用命令行长度限制。

R -e 'library(rmarkdown);rmarkdown::render("template.Rmd","html_document",output_file="report.html",output_dir="'${OUTDIR}'",params=list(param1="'${PARAM1}'",param2="'${PARAM2}'",...))

有可能增加此限制吗?

这将打破多种方式 - 包括您的参数中有空格或引号。

而是尝试将值作为参数传递。这样的事情应该让您了解它的工作原理:

# create a script file
tee arguments.r << 'EOF'
argv <- commandArgs(trailingOnly=TRUE)
arg1 <- argv[1]
print(paste("Argument 1 was", arg1))
EOF
# set some values
param1="foo bar"
param2="baz"
# run the script with arguments
Rscript arguments.r "$param1" "$param2"

预期输出:

[1] "Argument 1 was foo bar"

始终引用您的变量,并始终使用小写变量名称以避免与系统或应用程序变量发生冲突。

最新更新