首页 > 解决方案 > 为什么涉及长期进程的 $() 中的 grep -m 1 会卡住?

问题描述

我正在尝试监视一个无限任务,直到第一个匹配行。这很好用:

$ adb -L tcp:qa-qemu3.mlan:5037 -s emulator-5616 logcat | grep -m 1 v
05-18 11:34:08.386 21032 21032 D ICU     : No timezone override file found: /data/misc/zoneinfo/current/icu/icu_tzdata.dat
$

我想将该输出捕获到一个变量中,但是当我尝试时,shell 卡住了:

$ F=$(adb -L tcp:qa-qemu3.mlan:5037 -s emulator-5616 logcat | grep -m 1 g)
^C
$ echo $F
--------- beginning of main
$ 

有一些明显的基于文件的解决方法,特别是我可以使用第一个版本,在withlogcat中重新运行它,但我很好奇如何避免卡住,因为管道中的所有进程都没有退出。而且对我不起作用。$()-d$()timeout/timelimit

这是在 MacOs High Sierra 上。

标签: shellwedge

解决方案


推荐阅读