Запуск скрипта R через скрипт оболочки. Синтаксическая ошибка около неожиданного токена `('

Запуск скрипта R через скрипт оболочки. Синтаксическая ошибка около неожиданного токена `('

В настоящее время я пытаюсь запустить скрипт R через скрипт оболочки.

Вот скрипт R:

test = rnorm(1:100, 1000)
write.csv(test, 'test.csv')

А вот скрипт bash, который вызывает R:

#!/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оболочка отличается от оболочки bash. Вам нужно использовать способ запуска команд без входа в Rкомандную строку напрямую и использовать тот же подход в скрипте оболочки.

решение2

Я столкнулся с той же проблемой при запуске скрипта в контейнере Ubuntu, после замены \r\n на \n все заработало. Откройте скрипт с помощью текстового редактора и замените все \r\n на \n

Связанный контент