bash – 通过sbatch传递命令行参数

前端之家收集整理的这篇文章主要介绍了bash – 通过sbatch传递命令行参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有以下简单的bash脚本,我想通过SLURM提交给批处理服务器:
#!/bin/bash

#SBATCH -o "outFile"$1".txt"
#SBATCH -e "errFile"$1".txt"

hostname

exit 0

在这个脚本中,我只想把主机名的输出写在我通过命令行控制的全名的文本文件中,如下所示:

login-2:jobs$sbatch -D `pwd` exampleJob.sh 1
Submitted batch job 203775

不幸的是,似乎我的最后一个命令行参数(1)没有通过sbatch进行解析,因为创建的文件没有我要查找的后缀,并且字符串“$1”是从字面上解释的:

login-2:jobs$ls
errFile$1.txt  exampleJob.sh outFile$1.txt

我在SOelsewhere看过周围的地方,但我没有任何运气.本质上我正在寻找的是相当于启用了Torque的群集中qsub实用程序的-v开关.

编辑:正如基础注释线程中所提到的,我解决了我的问题困难的方式:而不是有一个单一的脚本将被提交到批处理服务器,每个具有不同的命令行参数,我创建了一个“主脚本”,简单地将相同的内容回传并重定向到不同的脚本,每个的内容都被传递的命令行参数改变.然后我通过sbatch将所有这些提交给我的批处理服务器.但是,这并没有回答原来的问题,所以我犹豫,把它添加为我的问题的答案或者标记这个问题解决了.

以#SBATCH开头的行不会被bash解释,而是用sbatch代码替换.
sbatch选项不支持$1 vars(只有%j和其他一些,%1替换$1将不起作用).
当您没有并行运行不同的sbatch进程时,可以尝试一下
#!/bin/bash

touch outFile${1}.txt errFile${1}.txt
rm link_out.sbatch link_err.sbatch 2>/dev/null # remove links from prevIoUs runs
ln -s outFile${1}.txt link_out.sbatch
ln -s errFile${1}.txt link_err.sbatch

#SBATCH -o link_out.sbatch
#SBATCH -e link_err.sbatch

hostname
# I do not know about the background processing of sbatch,are the jobs still running
# at this point? When they are,you can not delete the temporary symlinks yet.

exit 0

替代方案:
正如你在评论中所说的,你可以做一个主语.
这个脚本可以包含这样的行

cat  exampleJob.sh.template | sed -e 's/File.txt/File'$1'.txt/' > exampleJob.sh
# I do not know,is the following needed with sbatch?
chmod +x exampleJob.sh

在您的模板中,#SBATCH行看起来像

#SBATCH -o "outFile.txt"
#SBATCH -e "errFile.txt"

猜你在找的Bash相关文章