bash - 在单独的目录中为每次运行编写一个配置文件,然后启动 mpirun
问题描述
我需要通过每次更改一个参数来进行一组计算。计算目录包含一个名为“test.ctrl”的控制文件、一个名为“job-test”的作业提交文件和一堆数据文件。每个计算都应该使用相同的控制文件名(写在作业测试中)提交,并且在这些数据文件中给出输出而不更改它们的名称,这会产生覆盖问题。出于这个原因,我想用 bash 脚本自动化作业提交过程,这样我就不需要手动提交每个计算。
例如,我在目录 b1-k1-a1 中进行了第一次计算(我选择这种格式的 dir 名称来表示计算参数)。此 test.ctrl 文件具有以下参数:
Beta=1
Kappa=1
Alpha=0 1
我使用'sbatch job-test'命令提交了这份工作。对于下面的计算,我的代码应该复制这个名为 bX-kY-aZ 的整个目录,在控制文件中进行更改,最后提交作业。我天真地尝试在作业测试文件中编写整个内容,如下面的 MWE 所示:
#!/bin/sh
#SBATCH -N 1
#SBATCH -n 1
#SBATCH --time=0:15:00 ##hh:mm:ss
for n in $(seq 0 5)
do
for m in $(seq 0 5)
do
for v in $(seq 0 5)
do
mkdir b$n-k$m-a$v
cd b$n-k$m-a$v
cp ~/home/b01-k1-a01/* .
sed "s/Beta=1/Beta=$n/" test.ctrl
sed "s/Kappa=1/Kappa=$m/" test.ctrl
sed "s/Alpha=0 1/Alpha=0 $v/" test.ctrl
cd ..<<EOF
EOF
mpirun soft.x test.ctrl
sleep 5
done
done
done
如果您能建议我如何使其以这种方式工作,我将不胜感激。
解决方案
正如评论中所建议的,在我移到cd ..
循环的最后并删除了 sed 之后,它起作用了。因此,这现在有效:
#!/bin/sh
#SBATCH -N 1
#SBATCH -n 1
#SBATCH --time=0:15:00 ##hh:mm:ss
for n in $(seq 0 5)
do
for m in $(seq 0 5)
do
for v in $(seq 0 5)
do
mkdir b$n-k$m-a$v
cd b$n-k$m-a$v
cp ~/home/b01-k1-a01/* .
cat >test.ctrl <<EOF
Beta=$n
Kappa=$m
Alpha=0 $v
EOF
mpirun soft.x test.ctrl
sleep 5
cd ..
done
done
done
推荐阅读
- firebase - Flutter 应用因 dart.html 而停止工作
- mysql - 如何在 Laravel 刀片表中添加空行
- c - 将可执行文件复制到内存后,动态链接器会修改引用吗?
- excel - 如果单元格包含多个特定文本,则复制并粘贴。怎么做?
- google-chrome - 按钮单击在 Chrome 中的 iMacro 上不起作用
- jquery - 如何从jquery中共享同一类的元素集中定位特定元素?
- pdf - 如果 PDF 文件是第一代文档,我们如何检查 uipath?
- flutter - 限制用户使用 Flutter 从图库或相机中选择大于 1 MB 的图像
- python - Python Selenium 错误 selenium.common.exceptions.ElementClickInterceptedException
- java - Spring Cloud Dataflow server Custom Build 2.6.1