在qsub脚本中使用变量作为参数参数

时间:2014-09-12 11:07:00

标签: bash sungridengine qsub

我想从文件夹中获取许多模型,并在sge脚本中使用它们来进行数组作业。所以我在SGE脚本中执行以下操作:

MODELS=/home/sahil/Codes/bistable/models
numModels=(`ls $MODELS|wc -l`)
echo $numModels 

#$ -S /bin/bash
#$ -cwd 
#$ -V
#$ -t 1-$[numModels] # Running array job over all files in the models directory.

model=(`ls $MODELS`)
echo "Starting ${model[$SGE_TASK_ID-1]}..."

但是我收到以下错误:

Unable to read script file because of error: Numerical value invalid!
The initial portion of string "$numModels" contains no decimal number

我也尝试过使用

#$ -t 1-${numModels}

#$ -t 1-(`$numModels`)

但这些都不起作用。欢迎任何建议/替代方法,但他们必须使用qsub的数组作业功能。

1 个答案:

答案 0 :(得分:2)

请注意,对于Bash,#$ -t 1-$[numModels]只不过是一个评论;因此它不会将变量扩展应用于numModels。

一个选项是在命令行中传递-t参数:从脚本中删除它:

#$ -S /bin/bash
#$ -cwd 
#$ -V

model=(`ls $MODELS`)
echo "Starting ${model[$SGE_TASK_ID-1]}..."

并使用

提交脚本
MODELS=/home/sahil/Codes/bistable/models qsub -t 1-$(ls $MODELS|wc -l) submit.sh

如果您希望拥有一个自包含的提交脚本,另一个选项是通过stdin传递整个脚本的内容,如下所示:

#!/bin/bash
qsub <<EOT
MODELS=/home/sahil/Codes/bistable/models
numModels=(`ls $MODELS|wc -l`)
echo $numModels 

#$ -S /bin/bash
#$ -cwd 
#$ -V
#$ -t 1-$[numModels] # Running array job over all files in the models directory.

model=(`ls $MODELS`)
echo "Starting ${model[$SGE_TASK_ID-1]}..."
EOT

然后直接提供或执行该脚本以提交作业数组(./submit.sh而不是qsub submit.sh,因为qsub命令是脚本的一部分。