Bash

通過 shell 腳本執行 R 腳本。意外標記 `(’ 附近的語法錯誤

  • January 6, 2019

我目前正在嘗試通過 shell 腳本執行 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 --mail-user=myemail@blabla.com
#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)'

為什麼我會收到此錯誤?

問題是 shell 試圖${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')

通過這種方式使用解釋器集,您現在可以從 shell 腳本執行它

Rscript ${HOME}/test.R

請記住,登錄Rshell 並在其上執行命令,並在 shell 腳本中嘗試它是不一樣的,Rshell 與 shell 不同bashR您需要使用這種方式來執行命令,而無需直接從命令行登錄,並在 shell 腳本中使用相同的方法。

引用自:https://unix.stackexchange.com/questions/408355