加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 检测到某些输出时自动取消二进制执行

发布时间:2020-12-14 00:06:02 所属栏目:Linux 来源:网络整理
导读:是否有可能以某种方式通过 shell运行可执行文件并自动使其在输出中匹配/检测到特定字符串的那一刻停止执行?就像我会手动点击CTRL C一样? 如果有,怎么样? 解决方法 你可以使用awk: program | awk '/pattern/{exit}1' 如果您还想打印包含图案的线条,请说:
是否有可能以某种方式通过 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'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读