Dockerfile中的多行Rscript

pet*_*ler 3 bash r rscript docker

我正在尝试使用R构建一个docker映像,并且我希望能够以一种清晰易读的方式跨越多行来突破我的软件包安装步骤,但是由于以下原因,bash似乎不喜欢这种方法不知道结尾)在哪里。

有没有办法使这行长代码分成多行?

Rscript -e 'devtools::install_cran(c("tidytext","janitor","corrr","officer","devtools","pacman"))'
Run Code Online (Sandbox Code Playgroud)

也许是这样的:

Rscript -e 'devtools::install_cran(c("tidytext","janitor",
                              "corrr","officer","devtools","pacman"))'
Run Code Online (Sandbox Code Playgroud)

这可能与Rscript有关吗?我尝试在每行的末尾使用\,但仍然无法正常工作。

我知道install2.r可以逐行列出软件包,但是我希望有一个向量包,devtools::install_cran如果可能的话,传递给它们。我已经看到其他人只是通过Rscript调用而简单地引用了他们的R脚本,但是我想在Dockerfile中看到我的所有安装步骤,而不是在容器中复制和运行外部R脚本。谢谢你的帮助。

Rscript test.R
Run Code Online (Sandbox Code Playgroud)

小智 5

BASH会将换行符解释为命令的结尾。

在BASH(我假设您正在使用)中,反斜杠后跟换行符被解释为该行的延续。除非在单引号内!

所以...

Rscript -e 'devtools::install_cran(c("tidytext","janitor",
                          "corrr","officer","devtools","pacman"))'
Run Code Online (Sandbox Code Playgroud)

将被解释为两个命令...

Rscript -e 'devtools::install_cran(c("tidytext","janitor",
Run Code Online (Sandbox Code Playgroud)

"corrr","officer","devtools","pacman"))'
Run Code Online (Sandbox Code Playgroud)

两者都不是正确的格式。

此外,BASH中的单引号字符串将无法处理转义。他们只是假设您的文字是文字。因此,您不能在BASH中的单引号字符串内继续一行。

底线是,如果要在BASH中用引号引起来的字符串内继续,则必须使用双引号引起来的字符串。您的选择如下:

Rscript -e "devtools::install_cran(c('tidytext','janitor', \  
                'corrr','officer','devtools','pacman'))"
Run Code Online (Sandbox Code Playgroud)

在BASH中使用双引号,在R或...中使用单引号

Rscript -e "devtools::install_cran(c(\"tidytext\",\"janitor\", \    
                \"corrr\",\"officer\",\"devtools\",\"pacman\"))"
Run Code Online (Sandbox Code Playgroud)

都使用双引号。