首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile中的多行Rscript

Dockerfile中的多行Rscript
EN

Stack Overflow用户
提问于 2017-11-05 23:05:26
回答 2查看 1.6K关注 0票数 4

我正试图用R构建一个码头形象,我希望能够打破我的软件包安装步骤,在一个干净,易于阅读,方式跨越多行,但bash似乎不喜欢的方法,因为不知道在哪里结束)。

是否有一种方法可以使这长行代码在多行之间分割?

代码语言:javascript
复制
Rscript -e 'devtools::install_cran(c("tidytext","janitor","corrr","officer","devtools","pacman"))'

也许,就像这样:

代码语言:javascript
复制
Rscript -e 'devtools::install_cran(c("tidytext","janitor",
                              "corrr","officer","devtools","pacman"))'

这和Rscript有关吗?我试着在每一行的末尾使用一个\,但它仍然不起作用。

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

代码语言:javascript
复制
Rscript test.R
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-06 00:31:09

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

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

所以..。

代码语言:javascript
复制
Rscript -e 'devtools::install_cran(c("tidytext","janitor",
                          "corrr","officer","devtools","pacman"))'

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

代码语言:javascript
复制
Rscript -e 'devtools::install_cran(c("tidytext","janitor",

代码语言:javascript
复制
"corrr","officer","devtools","pacman"))'

它们都没有形成良好的结构。

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

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

代码语言:javascript
复制
Rscript -e "devtools::install_cran(c('tidytext','janitor', \  
                'corrr','officer','devtools','pacman'))"

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

代码语言:javascript
复制
Rscript -e "devtools::install_cran(c(\"tidytext\",\"janitor\", \    
                \"corrr\",\"officer\",\"devtools\",\"pacman\"))"

在两种情况下使用双引号。

票数 7
EN

Stack Overflow用户

发布于 2017-11-05 23:14:05

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

代码语言:javascript
复制
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。所以你的代码会变成

代码语言:javascript
复制
install.r tidytext \
   janitor \
   corrr \
   officer \
   devtools \
   pacman 

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47127594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档