加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:31:07 所属栏目:安全 来源:网络整理
导读:假设我有以下简单的bash脚本,我想通过SLURM提交给批处理服务器: #!/bin/bash#SBATCH -o "outFile"$1".txt"#SBATCH -e "errFile"$1".txt"hostnameexit 0 在这个脚本中,我只想把主机名的输出写在我通过命令行控制的全名的文本文件中,如下所示: login-2:jobs$
假设我有以下简单的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

我在SO和elsewhere看过周围的地方,但我没有任何运气.本质上我正在寻找的是相当于启用了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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读