是否有可能以某种方式通过shell运行可执行文件并自动使其在输出中匹配/检测到特定字符串的那一刻停止执行?就像我会手动点击CTRL C一样?
如果有,怎么样?
解决方法:
你可以使用awk:
program | awk '/pattern/{exit}1'
如果您还想打印包含图案的线条,请说:
program | awk '/pattern/{print;exit}1'
例如:
$seq 200 | awk '/9/{print;exit}1'
1
2
3
4
5
6
7
8
9
编辑:(参考您的评论,程序是否会停止.)以下是一个将在无限循环中执行的脚本:
n=1
while : ; do
echo $n
n=$((n+1))
sleep 1
done
这个脚本foo.sh执行时说:
$time bash foo.sh | awk '/9/{print;exit}1'
1
2
3
4
5
6
7
8
9
real 0m9.097s
user 0m0.011s
sys 0m0.011s
如您所见,在输出中检测到模式时脚本终止.
编辑:似乎您的程序缓冲输出.你可以使用stdbuf:
stdbuf -o0 yourprogram | awk '/pattern/{print;exit}1'
如果你正在使用mawk,那么说:
stdbuf -o0 yourprogram | mawk -W interactive '/pattern/{print;exit}1'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。