
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.R
mit einem bash
Interpreter auszuführen, dessen Syntax ab Zeile 3 nicht zu verstehen ist. Verwenden Sie R
explizit den Interpreter, von dem test.R
aus es ausgeführt werden soll.
Stellen Sie den Interpreter für Ihr Rscript
in test.R
als
#!/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 R
der Shell und das Ausführen der Befehle darin und das Ausprobieren im Shell-Skript nicht dasselbe sind. R
Shell ist nicht dasselbe wie bash
Shell. Sie müssen die Methode verwenden, um die Befehle auszuführen, ohne sich direkt von der Befehlszeile aus anzumelden, R
und 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