我正在阅读“高级bash脚本”,在第31章中有一个问题。 我想不明白。
tail -f /var/log/msg | grep 'error' >> logfile
你能给我一个解释吗? 先谢谢你
在哪里放shell脚本/函数? .bashrc或bin?
从Bash中另一个更大的文本文件中find文本文件的行的最快方法
归档重新生成shell脚本
符号链接文件比X年龄更新,然后稍后删除符号链接一次文件年龄?
使用多个pipe道从Python执行Shell脚本
如何查找文件中特定行的字节位置
有bash脚本执行多个程序作为单独的进程
bash正则expression式在linux上工作,但不是solaris
作为@chepner评论, grep正在使用一个更大的缓冲区(可能是4k或更多)来缓冲它的stdout。 大部分标准实用程序在管道或重定向到文件时都会执行此操作。 当直接输出到终端时,它们通常只切换到线路缓冲模式。
您可以使用stdbuf工具来强制grep对其输出进行行缓冲:
tail -f /var/log/msg | stdbuf -oL grep 'error' >> logfile
for ((i=0;;i++)); do echo $i; sleep 0.001; done | grep . | cat
和
for ((i=0;;i++)); do echo $i; sleep 0.001; done | stdbuf -oL grep . | cat
在第一个命令中,从grep .输出grep . (即匹配所有的行)被缓冲进入管道cat 。 在我的缓冲区似乎是4K左右。 当缓冲区被填充然后被刷新时,你会看到数据chunks的上升数字输出。
在第二个命令中, grep输入到cat的管道是行缓冲的,所以你应该看到每一行的终端输出,即或多或少的连续输出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。