我有一个循环,随着它的增长,它将跟随一个日志文件,寻找一个模式并对其作出反应。问题是我在某个地方打了一个缓冲区,导致输入循环延迟,我相信这是由于tail -f
和管道日志到grep
。最大限度地减少在bash中延迟循环处理的缓冲管道
不工作
while read l; do echo "l = |$l|"; done < <(tail -f $logfile | grep $pattern)
我有安装$logfile
作为fifo
并具有cat realfile.log > $logfile
3或4倍(realfile.log是〜2K线),缓冲似乎以填充和线之前通过循环立即处理。
如果我从重定向的stdin中删除grep $pattern
,则按预期处理该文件。
不工作
while read l; do echo "l = |$l|"; done < <(tail -f $logfile)
同样适用
while read l; do echo "l = |$l|"; done < <(tail $logfile | grep $pattern)
难道tail
不fsync()'ing
上-f
写操作?
http://stackoverflow.com/questions/972370/how-do-you-pipe-input-通过grep-to-another-utility – Iain
lain,在我的搜索中没有看到。 – mmlb