【发布时间】:2015-09-26 19:51:41
【问题描述】:
我在bash 脚本中有一个while 循环,它应该在开始时和每5 秒间隔做一些不同的事情。允许完成任何先前的循环。 5s 间隔由heartbeat 函数设置的do_different 全局变量指示。另一个复杂情况是正常的while 循环在未知的时间内完成(在下面的脚本中用RANDOM 进行了简化)。
使用cron 不是一种选择,也不是为随机过程计时。
我已经尝试过使用管道和进程替换,但均未成功。 整个脚本可能会被重构。
#!/bin/bash
function heartbeat {
do_different=true
while sleep 5s
do
do_different=true
done
}
heartbeat &
while true
do
if $do_different
then
echo 'Something different'
do_different=false
i=0
else
# process of random duration; not important
r=$(( 1 + RANDOM % 3 ))
sleep "${r}s"
i=$((i + r))
echo "$i"
fi
done
【问题讨论】:
-
我认为 set -m 是你要找的...stackoverflow.com/questions/1455695/…
标签: bash asynchronous while-loop global-variables sleep