这是一个shell脚本。请将受控环境随机数生成子shell 推断为在异步日志记录情况下使用它(我打算将它用于 inotifywait 输出)。
group=0
(
for val in {1..10}; do
echo "$RANDOM/20000" | bc | xargs sleep # this waits 0, 1, or 2 seconds before each number is printed
echo $val
done
) | while true; do
while read -t 1 line; do
echo "read time=$group read=$line"
done
((group++))
done
这会产生如下输出:
read time=1 read=1
read time=2 read=2
read time=2 read=3
read time=3 read=4
read time=3 read=5
read time=3 read=6
read time=4 read=7
read time=5 read=8
read time=5 read=9
read time=5 read=10
但它随后挂起并且不退出。它卡在外循环中,不断增加group
:
$ echo $group
1336794
显然,由于输入已经完成,内部循环已经退出,并且变量的增量进入了超光速。
如何退出循环?输入完成后,是否有某种else
子句可以破解内部 for 循环以break
跳出外部循环?
当然,必须有一种比在外循环中进行计时更稳健的方法来查看它是否通过得太快。