【发布时间】:2013-10-15 14:57:23
【问题描述】:
我有一个循环,它会随着日志文件的增长而跟踪它,搜索模式并对其做出反应。问题是我在某个地方遇到了一个缓冲区,该缓冲区延迟了循环获取输入,我相信这是由于tail -f 并将日志传送到grep。
不起作用
while read l; do echo "l = |$l|"; done < <(tail -f $logfile | grep $pattern)
我已将 $logfile 设置为 fifo 并且必须 cat realfile.log > $logfile 3 或 4 次(realfile.log 约为 2K 行),然后缓冲区似乎已填满并立即处理这些行 通过循环。
如果我从重定向的标准输入中删除 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上的写吗?
【问题讨论】:
-
lain,在我的搜索中没有看到。
标签: bash shell loops redirect pipe