在 bash 上重复命令直到满足条件

Repeating a command on bash until condition is met

我正好可以访问 100 个节点。一旦我向所有 100 个节点提交作业,我想在 180 秒的睡眠持续时间后查询以找出队列中仍有多少作业。如果队列中有一些作业,bash 上的输出将指示待处理作业的数量。如果所有作业都在 100 个节点上开始 运行,我想提交新作业并这样做,直到所有作业完成。当所有作业完成后,bash 应该退出 while 循环。

我写了下面几行bash代码

n=1
while [ $n -gt 0 ]; do 
    if (($(qselect -u username | grep 'Q' | wc -l) > 0)); then 
        echo "Jobs in Queue=$(qselect -u username | grep 'Q' | wc -l)"
    else 
        python parallel_jobs.py
        n=$(qselect -u username | grep 'Q' | wc -l)
    fi
    sleep 180
done

我发现 bash 仅在 1 遍后退出 while 循环,这与预期相反。

我是这样工作的:

#!/bin/bash
n=1
while [ $n -gt 0 ]; do 
    if [ $(qstat -u username | grep -c Q) -gt 1 ]; then 
        echo "Jobs in Queue=$(($(qstat -u username | grep -c Q)-1))"
    else 
        python parallel_jobs.py
        n=$(($(qstat -u username | grep -c Q)-1))
    fi
done