访问数组作业的任务 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
我通常使用类似下面的方式来提交数组作业,
#!/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