4

我必须从 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")'

做对了。

我错过了什么?

4

1 回答 1

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}\")"
于 2013-07-06T13:05:45.093 回答