我有一个有趣的场景......
编辑:我正在考虑有大量测试流入stdin的情况(如loop.sh),在其他程序(loop2.sh)中以较慢的速率读取。我做了以下假设:只有最新数据很重要,所有以前的数据都可以丢弃。我一直在考虑stdin上的实时文本过滤,有什么解决方案吗?这是我的测试stdin缓冲区的实验:
这是loop.sh
#! /bin/bash
i=0
for (( ; ; ))
do
echo "$i" >&2
echo "$i"
((i++))
done
这是loop2.sh
#! /bin/bash
i=0
for (( ; ; ))
do
echo "Count: $i"
((i++))
sleep 1
done
我运行以下内容: ./loop.sh | ./loop2.sh
我得到:
...
12762
12763
12764
12765
12766
12767
12768
12769
Count: 2
Count: 3
Count: 4
Count: 5
Count: 6
Count: 7
Count: 8
Count: 9
...
本质上来自loop.sh的stdin缓冲区已填满:D
那也停止了执行!
我的问题是我能改变这种行为吗? ie)自动覆盖标准输入或改变大小?另外为什么12769?默认有多大?