【发布时间】:2014-09-24 14:39:56
【问题描述】:
我有一个这样的 bash 脚本
data_generator_that_never_guits | while read data
do
an_expensive_process_with data
done
第一个进程连续生成事件(以不规则的时间间隔),当它们可用时需要对其进行处理。这个脚本的一个问题是 read on 会消耗一行输出;并且由于处理非常昂贵,我希望它消耗当前可用的所有数据。另一方面,如果有新数据可用,则必须立即开始处理。简而言之,我想做这样的事情
data_generator_that_never_guits | while read_all_available data
do
an_expensive_process_with data
done
如果没有数据可供消费,命令 read_all_available 将等待,或者将所有当前可用的数据复制到变量中。如果数据不包含完整的行,那很好。基本上,我正在寻找读取的模拟,它将读取整个管道缓冲区,而不是从管道中读取一行。
对于你们中间的好奇,我有一个构建脚本需要在源文件更改时触发重建的问题的背景。我想避免过于频繁地触发重建。请不要建议我使用 grunt、gulp 或其他可用的构建系统,它们不适合我的目的。
谢谢!
【问题讨论】:
标签: shell pipe producer-consumer