2017-11-05 8 views
0

R으로 도커 이미지를 만들려고 노력하고 있습니다. 여러 줄에 걸쳐 깨끗하고 읽기 쉬운 방식으로 패키지 설치 단계를 수행 할 수 있지만 bash 결말이 어디인지 모르기 때문에 접근 방식을 좋아하지 않는 것 같습니다.)Dockerfile의 다중 라인 Rscript

긴 줄의 코드를 여러 줄로 나누는 방법이 있습니까? 어쩌면하려면

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

, 이런 식으로 뭔가 : RSCRIPT과는 어떻게이게 가능

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

? 각 줄의 끝에 \를 사용하여 시도했지만 여전히 작동하지 않습니다.

필자는 install2.r이 한 줄씩 패키지를 나열 할 수 있음을 이해합니다. 그러나 가능하면 devtools::install_cran에 전달할 패키지 벡터를 갖고 싶습니다. 다른 사람들이 Rscript를 통해 단순히 R 스크립트를 참조하는 것을 보았습니다. 그러나 Dockerfile 내에 모든 설치 단계를보고 내 컨테이너에 외부 R 스크립트를 복사하고 실행하지 않으려합니다. 당신의 도움을 주셔서 감사합니다.

Rscript test.R 

답변

2

BASH는 명령의 끝으로 개행을 해석합니다.

BASH (내가 사용하고 있다고 가정하고 있음)에서 줄 바꿈 뒤에 이어지는 줄 바꿈은 줄의 연속으로 해석됩니다. 작은 따옴표 안에있을 때를 제외하고!

그래서 ...

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

는 ... 두 명령으로 잘 형성되어 어느 것도
"corrr","officer","devtools","pacman"))' 

Rscript 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\"))" 

다음과 같이 귀하의 옵션이 있습니다.

+0

아, 매우 도움이됩니다. 감사합니다. 이것에 대한 더 자세한 정보가 필요한 곳이 있습니까? – petergensler

+1

https://www.gnu.org/software/bash/manual/bash.html로 충분할 것입니다. 특히 https://www.gnu.org/software/bash/manual/bash.html#Quoting 섹션. – dcdillon

+1

작은 따옴표 내에서 endline이 무시된다는 것을 나타 내기 위해 게시물을 편집했습니다. – dcdillon

0

참조 할 수있는 Docker 파일이 많이 있습니다.

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 패키지하지만 R 패키지입니다 : 하나의 긴 줄에 의해 깨진 다음 공식 R-기본 이미지를 생산하는 Rocker Project에서 우리 중 하나에서 일부입니다 백 슬래시. 이를 위해 install.r 또는 install2.rlittler으로 사용하는 경향이 있습니다. 그래서 코드는

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

과소 평가 측면은 당신이 사실 데비안이나 우분투 중 하나에서 바이너리 이들의 일부를 얻을 수 있다는 것입니다 될 것입니다,하지만 난 자신이를 찾는 취재를 둡니다.