shell - 为什么涉及长期进程的 $() 中的 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 上。
解决方案
推荐阅读
- c# - 更改预制件颜色的简化方法
- c++ - 写入/读取时的套接字通信数据损坏
- python - 如何从文件中的一行中提取一个数字,该数字连接到python中的其他字符?
- amazon-web-services - aws cloudformation 如何在映射块中使用条件?
- tfs - MSBUILD:错误 MSB1009:Azure Devops TFS 上不存在项目文件
- reactjs - 重新渲染组件 React 表
- python - Pygame Zero:不同级别的不同背景图像可能吗?
- linux - 汇编 - 如何在函数调用之间正确使用堆栈
- python - 如何从 Python fcache 中迭代和删除某些文件?
- sapui5 - 对话框内的内容使用什么 openui5 布局(见里面的 UI 原型)