我有以下脚本用于提交slurm作业:
#!/bin/sh
#!/bin/bash
#SBATCH -J $3 #job_name
#SBATCH -n 1 #Number of processors
#SBATCH -p CA
nwchem $1 > $2
第一个参数($1)是我的输入,第二个参数($2)是我的输出,我希望第三个参数($3)成为我的作业名称。如果我这样做,作业名称就是“$3”。我该如何将作业名称作为脚本的参数进行传递呢?
谢谢。
我有以下脚本用于提交slurm作业:
#!/bin/sh
#!/bin/bash
#SBATCH -J $3 #job_name
#SBATCH -n 1 #Number of processors
#SBATCH -p CA
nwchem $1 > $2
第一个参数($1)是我的输入,第二个参数($2)是我的输出,我希望第三个参数($3)成为我的作业名称。如果我这样做,作业名称就是“$3”。我该如何将作业名称作为脚本的参数进行传递呢?
谢谢。
SSBATCH指令被shell视为注释,并且不会对$3
进行变量替换。有几种解决方案:
选项1:在命令行上传递-J
参数:
sbatch -J thejobname submission_script.sh input.data output.res
选项2:通过stdin
传递脚本,将位置参数($1
,$2
等)替换为命名参数。
IN=input.data OUT=output.res NAME=thejobname <submission_script.sh sbatch
选项3:编写一个包装器
#!/bin/bash
sbatch <<EOT
#!/bin/sh
#SBATCH -J $3 #job_name
#SBATCH -n 1 #Number of processors
#SBATCH -p CA
nwchem $1 > $2
EOT
然后像这样使用它:
submit.sh input.data output.red thejobname
注意第二个shebang (#!/bin/bash
) 是无用的,会被(父级)shell 忽略。
#!/bin/sh
#!/bin/bash
#SBATCH -n 1 #Number of processors
#SBATCH -p CA
srun nwchem -J $3 $1 > $2
sbatch -J $3 run.sh
,并且在squeue
中正确反映了作业名称。 - user0193