Bash stdin缓冲区已满

时间:2014-01-17 05:44:18

标签: linux bash loops stdin buffering

我有一个有趣的场景......

编辑:我正在考虑有大量测试流入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?默认有多大?

0 个答案:

没有答案