-
一:缘起
昨夜雨疏风骤,家里饭菜已好. 赶着下班.
但是为了监控一个安卓设备的软件问题.
于是乎, 输入 adb logcat |grep *********>my.log (*****就是某关键字)
准备监控一晚上,明早来看看日志中有没有要的记录.
今朝来看,my.log里面一片空白. 按住ctrl+c终止命令后. my.log里面还是什么都没有.
然而输入"adb logcat |grep *********" 却是有一大片内容的
为什么不能重定向输入到文件呢?
------------------------------------------------
-
二:众里寻他千百度
难道grep的问题; 输入"echo ** |grep *********>my.log" 是可以的
又或是adb的问题? 尝试"adb logcat -d |grep *********>my.log" 也写进去了
说明不是这2个原因,
默然回首是否是缓冲的问题呢,百度了一下果然"那人的确在灯火阑珊处"
grep 在控制台里面直接输出,是用了行缓冲区,也就是收到一行就输出了.能看到内容
但是将他重定向输出到文件,则用的是full缓冲,必须等输出全部结束才写入.
所以中途看不到,按住ctrl+c,结束进程(直接退出)也写不进去.
--------------------------------------------------
-
三:解决
grep命令增加 "--line-buffered" 参数 设置为行缓冲
adb logcat | grep XXX --line-buffered > my.log
日志随后徐徐写之. 问题解决