直到满足循环条件时,命令才被执行

时间:2019-08-15 17:54:24

标签: bash sleep until-loop

因此,我有一个“直到”循环,然后,一旦满足“直到”循环的条件,我就希望循环停止并继续执行命令行。我使用PBS(也已写入脚本)提交了一些作业。 .com文件是输入,.log文件是输出。当前,调用每个文件的数量彼此相等,从而结束循环似乎有些问题。

$ direct设置为工作目录

我从几个观察结果中知道这一点:

1)在超级计算机上检查睡眠过程仍在运行

2)当我检查队列时,所有作业都已完成

3)在脚本中,我进一步要求它发送电子邮件,但这不会发生

这是我第一次使用直到循环和sleep命令,因此我想知道语法是否有错误。如果我不能解决直到直到循环,理论上我可以使用if / then循环做同样的事情,但是从我的观察来看,直到循环应该更有效。

这是我正在编写的引起问题的代码。完成生成.log文件的工作可能需要一个多小时,因此我不需要很短的睡眠时间。

COM=$(find $direct -maxdepth 1 -type f -name "*.com" -printf x | wc -c)
log=$(find $direct -maxdepth 1 -type f -name "*.log" -printf x | wc -c)

until [[ $COM = $log ]];
do 
    sleep 10 #wait 10 seconds between checking values
done 

pattern="*.out"
files=( $pattern )
grep "Isotropic" "${files[0]}" |tr -s ' ' | cut -d " " -f2 > 001.anmr
grep "Isotropic" "${files[0]}" |tr -s ' ' | cut -d " " -f3 > 000.anmr

1 个答案:

答案 0 :(得分:1)

“直到”表达式不重复查找命令。相反,它将比较先前计算的$ COM和$ log值。听起来好像您想在每次循环中运行find命令。我做了一些调整,以得到此演示脚本:

#!/usr/bin/env bash
set -x   # remove this debugging setting
direct=${1:?Please provide a directory}

COM="find $direct -maxdepth 1 -type f -name *.com"
log="find $direct -maxdepth 1 -type f -name *.log"

until [[ $($COM | wc -l) = $($log | wc -l) ]];
do
    sleep 10 #wait 10 seconds between checking values
done

echo DONE