我想从文件夹中获取许多模型,并在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的数组作业功能。
答案 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
命令是脚本的一部分。