我必须从shell脚本运行knitr。但是我搞砸了。
我的shell脚本test.sh是:
#!/bin/bash
input=$1
echo Input $input
# I want to start the following when input is test.Rnw
# /usr/bin/Rscript -e 'library(knitr); knit("test.Rnw")'
cmd_start="'library(knitr);knit(\""
cmd_end="\")'"
echo /usr/bin/Rscript -e $cmd_start$input$cmd_end
/usr/bin/Rscript -e $cmd_start$input$cmd_end
运行时
./ test.sh test.Rnw
输出
Input test.Rnw
/usr/bin/Rscript -e 'library(knitr);knit("test.Rnw")'
[1] "library(knitr);knit(\"test.Rnw\")"
所以命令似乎没问题。但是R没有运行knitr。相反,它将输入作为变量处理。
运行
/usr/bin/Rscript -e 'library(knitr);knit("test.Rnw")'
做对了。
我错过了什么?
答案 0 :(得分:6)
您的问题是双引号:$cmd_start$input$cmd_end
变为'library(knitr);knit(\"test.Rnw\")'
但不是'library(knitr);knit("test.Rnw")'
。
尝试以下方法:
cmd_start='library(knitr);knit("'
cmd_end='")'
/usr/bin/Rscript -e $cmd_start$input$cmd_end
或者:
/usr/bin/Rscript -e "library(knitr); knit(\"${input}\")"