android - grep 在显示请求的匹配数后不会终止

标签 android bash grep adb

我正在尝试使用 grep 输出第一个匹配项并终止。在我的例子中,正在搜索的流来自 Android logcat,但这可能无关紧要:

adb logcat | grep -m1 SomeFilter

我使用 -m 选项将结果限制为单个匹配项。如果输入流包含多个匹配项,则会显示第一个匹配项,并且 grep 会按预期终止。但是,如果输入流中只有一个匹配项,则会显示该匹配项,但 grep 永远不会终止。知道为什么吗?

最佳答案

有三个想法。

1)输入流中既没有LF符号也没有EOF。

2) grep 实际上是在看到第一个匹配项后终止。但是 adb 不会终止,尽管 grep 退出并且写入管道失败。 adb 只是忽略这些写入错误并继续运行。您可以检查 grep 是否真的终止了,只需在另一个终端中键入 pgrep grep 即可。

3) 最有可能的是,如果真的只有一个匹配项,仅此而已,那么 adb 可能不再向管道写入,并且它永远不会收到写入错误和 SIGPIPE。因此 adb 仍在运行,而 grep 实际上已终止。

关于android - grep 在显示请求的匹配数后不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34502527/

相关文章:

android - 尝试访问继承字段时出现 NullPointerException

linux - 如何根据 Linux 系统调用实现后台进程?

linux - grep 和egrep 选择数字

linux - grep -Ev 不适用于我的文件

linux - 迭代多行 block 中的 grep 输出

安卓模拟器 : select AVD (Android Virtual Device) to run by default

android - 如何获取 'Google Play Developer Console' 中显示的设备型号?

android.content.res.Resources$NotFoundException : File res/mipmap-xhdpi-v4/ic_copyright_black_24dp. png 来自 xml 类型 xml 资源 ID #0x7f0d0007

linux - 将列表插入字符串

linux - 重定向文件中匹配特定值的记录