访问数组作业的任务 ID

Accessing task id for array jobs

我通常使用类似下面的方式来提交数组作业,

#!/bin/bash
sbatch <<EOT
#!/bin/sh
#SBATCH --job-name=                      
#SBATCH --time=                           
#SBATCH --mem-per-cpu=                   
#SBATCH --array 0-                        

./myprogram.o ${SLURM_ARRAY_TASK_ID} <-- SLURM_ARRAY_TASK_ID not visible.. (A)
./script_that_runs_myprogram.sh      <-- SLURM_ARRAY_TASK_ID visible inside script (B)

EOT

在情况(B)中,script_that_runs_myprogram.sh可以看到定义任务ID的环境变量。在情况 (A) 中是否可以以某种方式访问​​数组索引?似乎没有必要使用另一个脚本来运行该程序。 SBATCH 参数手动定义的另一种情况非常乏味。

${SLURM_ARRAY_TASK_ID} 应该在选项 A 中可见。问题是,bash 过早地评估了变量。 Bash 在您发送该脚本时解释变量。那时,变量仍为空。尝试转义它:

#!/bin/bash
sbatch <<EOT
#!/bin/sh
#SBATCH --job-name=                      
#SBATCH --time=                           
#SBATCH --mem-per-cpu=                   
#SBATCH --array 0-                        

./myprogram.o ${SLURM_ARRAY_TASK_ID}

EOT