Ausführen eines R-Skripts über ein Shell-Skript. Syntaxfehler in der Nähe eines unerwarteten Tokens „(“

Ausführen eines R-Skripts über ein Shell-Skript. Syntaxfehler in der Nähe eines unerwarteten Tokens „(“

Ich versuche derzeit, ein R-Skript über ein Shell-Skript auszuführen.

Hier das R-Skript:

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

Und hier das Bash-Skript, das das R-Skript aufruft:

#!/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

Ich denke, ich habe alles richtig gemacht, aber die Ausgabe gibt den folgenden Fehler zurück:

/mydirectory/test.R: line 3: syntax error near unexpected token `('
/mydirectory/test.R: line 3: `test = rnorm(1:100, 1000)'

Warum habe ich diesen Fehler erhalten?

Antwort1

Das Problem besteht darin, dass die Shell versucht, Ihr Programm ${HOME}/test.Rmit einem bashInterpreter auszuführen, dessen Syntax ab Zeile 3 nicht zu verstehen ist. Verwenden Sie Rexplizit den Interpreter, von dem test.Raus es ausgeführt werden soll.

Stellen Sie den Interpreter für Ihr Rscriptin test.Rals

#!/usr/bin/env Rscript

module purge
module load R 
test = rnorm(1:100, 1000)
write.csv(test, 'test.csv')

Auf diese Weise können Sie es mit dem eingestellten Interpreter nun vom Shell-Skript aus ausführen als

Rscript ${HOME}/test.R

Denken Sie daran, dass das Anmelden bei Rder Shell und das Ausführen der Befehle darin und das Ausprobieren im Shell-Skript nicht dasselbe sind. RShell ist nicht dasselbe wie bashShell. Sie müssen die Methode verwenden, um die Befehle auszuführen, ohne sich direkt von der Befehlszeile aus anzumelden, Rund denselben Ansatz im Shell-Skript verwenden.

Antwort2

Ich hatte das gleiche Problem beim Ausführen eines Skripts auf einem Ubuntu-Container. Nachdem ich \r\n durch \n ersetzt hatte, funktionierte es. Öffnen Sie das Skript mit einem Texteditor und ersetzen Sie alle \r\n durch \n

verwandte Informationen