我已经搜索过这个并期望找到数百个解决方案,但没有找到!
我想读取 STDOUT 流并等待特定字符串出现,而不等待该过程完成。
我现在所拥有的,等待该过程完成后再返回输出:
RESP=$(execute some command 2>&1)
if $RESP contains something then do something;
如何实时读取流而不是等待它完成?
EDIT
我尝试了 paddy 建议的以下命令,用于测试与 ping 命令的配合:
RESP=$(ping 192.168.0.1 | grep seq=5 -m1)
但是它不适用于我想使用 dhcpcd 的命令:
RESP=$(dhcpcd wlan0 -r 192.168.0.190 | grep claims -m1)
与 ping 测试不同,命令的输出被发送到控制台而不是被隐藏,并且它永远不会检测到“claims”文本,即使它出现在输出中?
你可以通过管道进入grep
进行匹配并在遇到匹配时退出。这也将退出产生输出的程序。
if mycommand | grep something -q; then
dosomething
fi
如果有任何匹配,上面将退出(-q
),但不显示结果。如果你想看到输出,你可以在第一场比赛时退出(使用-m1
):
RESP=$(mycommand | grep something -m1)
阅读手册页grep
了解更多信息。
如果您不想取消产生输出的程序,您可以尝试将其写入后台文件,然后tail
该文件:
mycommand > output &
if tail -f output | grep something -q; then
dosomething
fi
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)