我有以下脚本用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'。如何将作业名称作为脚本的参数?
由于
答案 0 :(得分:7)
SBATCH指令被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忽略。