bash – 如何防止管道延迟输出?
发布时间:2020-12-16 01:52:41 所属栏目:安全 来源:网络整理
导读:当我在bash中运行下面的命令时,它会等到程序完成后再刷新所有输出.如果我移除管道,则立即打印每一行. { for i in `seq 3` ; do echo $i ; sleep 1 ; done ; } | perl -p -e 's,(.*ERROR.*),e[01;31m1e[00m,g' | perl -p -e 's,(.*WARNING.*),e[01;33
当我在bash中运行下面的命令时,它会等到程序完成后再刷新所有输出.如果我移除管道,则立即打印每一行.
{ for i in `seq 3` ; do echo $i ; sleep 1 ; done ; } | perl -p -e 's,(.*ERROR.*),e[01;31m1e[00m,g' | perl -p -e 's,(.*WARNING.*),e[01;33m1e[00m,(.*TCPEchoTest.*),e[01;30m1e[00m,(.*enters.*),e[00;33m1e[00m,g' 如何使用管道并仍然立即打印每条线? 解决方法
你可以用重复的-e选项连接几行perl代码(一定要用它们结束; – 它们串在一起形成一个程序).你可以用$| = 1使你的管道“热”.有关详细信息,请参阅
perl manual on
$| (页面下方2/3,搜索OUTPUT_AUTOFLUSH).
{ for i in `seq 3` ; do echo $i ; sleep 1 ; done ; } | perl -p -e 'BEGIN{$|=1};' -e 's,g;' -e 's,g;' 这将打印1,2,3,每个数字之间有一秒钟.实际上,当perl输出到终端时,不需要BEGIN行.但是如果你继续管道到另一个程序,你想要它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |