我想等到三个进程正在运行,所以我使用until
循环。这在检查一个过程时有效:
until pgrep my-process; do echo "waiting…"; done
但是,我无法添加其他条件。如果我用单方括号或双方括号包装条件,我会收到错误。具体来说,这两个都失败了。
until [[ pgrep my-process ]]; do echo "waiting…"; done
until [ pgrep my-process ]; do echo "waiting…"; done
如果方括号不适用于第一种情况,我不确定如何做多种情况。
答案 0 :(得分:3)
方括号不参与组合多个条件。
until pgrep my-process && pgrep my-other-process && pgrep my-last-process; do
echo "waiting..."
sleep 1
done
答案 1 :(得分:0)
方括号不用于命令分组。他们实际上做了一套完全不同的条件;你可以只用一个条件的方括号,你可以做多个没有方括号的条件。
until
,while
等所做的是运行指定的命令(在您的示例中为pgrep my-process
)并根据命令的退出代码。 [
和[[
只是命令的特定示例,通常可用于测试事物。
要合并多个条件,您可以将&&
用于“和”,将||
用于“或”([[
和[
命令具有自己的内部语法合并,但如果您愿意,也可以使用&&
和||
。对于更复杂的操作,您可以使用括号进行分组。
答案 2 :(得分:0)
尝试:
until (( `pgrep my-process |wc -l` > 2 )); do
echo "waiting..."
sleep 1
done
((
表示法用于数字比较。 wc -l
显示行数,在这种情况下表示进程数。