현재 쉘 스크립트를 통해 R 스크립트를 실행하려고 합니다.
R 스크립트는 다음과 같습니다.
test = rnorm(1:100, 1000)
write.csv(test, 'test.csv')
다음은 R을 호출하는 bash 스크립트입니다.
#!/bin/bash -l
#SBATCH --partition=compute
#SBATCH --job-name=test
#SBATCH --mail-type=ALL
#SBATCH [email protected]
#SBATCH --time=00:10:00
#SBATCH --nodes=1
#SBATCH --tasks-per-node=12
#SBATCH --account=myaccount
module purge
module load R
${HOME}/test.R
모든 작업을 올바르게 수행하고 있다고 생각하지만 출력에는 다음 오류가 반환됩니다.
/mydirectory/test.R: line 3: syntax error near unexpected token `('
/mydirectory/test.R: line 3: `test = rnorm(1:100, 1000)'
이 오류가 발생하는 이유는 무엇입니까?
답변1
문제는 쉘이 ${HOME}/test.R
인터프리터를 사용하여 프로그램을 실행 하려고 시도 bash
하지만 3행의 구문을 이해하려고 시도하지 않는다는 것입니다. 실행하려는 인터프리터를 R
명시적으로 사용하십시오 .test.R
통역사를 다음으로 Rscript
설정하세요 .test.R
#!/usr/bin/env Rscript
module purge
module load R
test = rnorm(1:100, 1000)
write.csv(test, 'test.csv')
이렇게 하면 인터프리터 세트를 사용하여 이제 쉘 스크립트에서 실행할 수 있습니다.
Rscript ${HOME}/test.R
쉘 에 로그인 R
하고 명령을 실행하는 것은 쉘 스크립트에서 시도하는 것과 같지 않습니다. R
이는 shell 과 다릅니다 bash
. 명령줄에서 직접 로그인할 필요가 없는 방식으로 명령을 실행해야 하며 R
, 쉘 스크립트에서도 동일한 방법을 사용해야 합니다.
답변2
Ubuntu 컨테이너에서 스크립트를 실행하는 데 동일한 문제가 있었고 \r\n을 \n으로 바꾼 후에는 작동했습니다. 텍스트 편집기로 스크립트를 열고 모든 \r\n을 \n으로 바꿉니다.