Dockerfile中的多行Rscript

Dockerfile中的多行Rscript,r,bash,docker,rscript,R,Bash,Docker,Rscript,我正在尝试用R构建docker映像,我希望能够以一种干净、易于阅读的方式跨多行完成我的包安装步骤,但是bash似乎不喜欢这种方法,因为不知道结尾在哪里 有没有办法将这一长行代码分割成多行 Rscript -e 'devtools::install_cran(c("tidytext","janitor","corrr","officer","devtools","pacman"))' 也许是这样的: Rscript -e 'devtools::install_cran(c("tidytext",

我正在尝试用R构建docker映像,我希望能够以一种干净、易于阅读的方式跨多行完成我的包安装步骤,但是bash似乎不喜欢这种方法,因为不知道结尾在哪里

有没有办法将这一长行代码分割成多行

Rscript -e 'devtools::install_cran(c("tidytext","janitor","corrr","officer","devtools","pacman"))'
也许是这样的:

Rscript -e 'devtools::install_cran(c("tidytext","janitor",
                              "corrr","officer","devtools","pacman"))'
这可以用Rscript实现吗?我尝试在每行末尾使用\,但仍然不起作用

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

Rscript test.R

您可以查看相当多的Docker参考文件。以下是我们制作官方r-base图像的一部分:

RUN apt-get update \     
        && apt-get install -y --no-install-recommends \     
                ed \                                 
                less \   
                locales \     
                vim-tiny \   
                wget \  
                ca-certificates \
                fonts-texgyre \ 
        && rm -rf /var/lib/apt/lists/* 
现在这是针对
apt
包的,但是来自CRAN的R包的工作方式是相同的:一条长长的线,被反斜杠分开。为此,我们倾向于使用中的
install.r
install2.r
。因此,您的代码将成为

install.r tidytext \
   janitor \
   corrr \
   officer \
   devtools \
   pacman 

一个被低估的方面是,事实上,你可以从Debian或Ubuntu中获得一些二进制文件,但我把寻找这些文件的工作留给你自己

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

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

所以

将被解释为两个命令

Rscript -e 'devtools::install_cran(c("tidytext","janitor",

两者都不是很好的形式

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

底线是,如果希望在BASH中的引号字符串中继续,则必须使用双引号字符串。你的选择如下:

Rscript -e "devtools::install_cran(c('tidytext','janitor', \  
                'corrr','officer','devtools','pacman'))"
在BASH中使用双引号,在R或

Rscript -e "devtools::install_cran(c(\"tidytext\",\"janitor\", \    
                \"corrr\",\"officer\",\"devtools\",\"pacman\"))"

使用双引号。啊,非常有用,谢谢。有什么地方可以让我了解更多的信息吗?这可能就足够了。特别是这一部分。编辑了这篇文章,指出\+结束行将在单引号内被忽略。“有什么地方我可以获取更多信息吗?”每一个shell编程资源。
Rscript -e "devtools::install_cran(c('tidytext','janitor', \  
                'corrr','officer','devtools','pacman'))"
Rscript -e "devtools::install_cran(c(\"tidytext\",\"janitor\", \    
                \"corrr\",\"officer\",\"devtools\",\"pacman\"))"