微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当检测到某个输出时自动取消二进制执行

是否有可能以某种方式通过shell运行可执行文件,并在输出中匹配/检测到特定的string时自动使其停止执行? 就像我会手动点击CTRL + C一样?

如果是的话,怎么样?

如何手动读取/写入.exe机器码?

是否有可能生产独立的haskell可执行文件

Linux可执行文件是否与OS X“兼容”?

区分由cl.exe生成的64位PE对象文件(Visual Studio C ++)

从外部.exe启动v / s启动为windows服务,从性能angular度来看哪一个更高效?

你可以使用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'

使用协处理器:

coproc CO { yourcommand; } while read -ru ${CO[0]} line do case "$line" in *somestring*) kill $CO_PID; break ;; esac done

请注意,如果命令缓冲其输出,那么在写入管道时所执行的命令数量就会很多,在检测到字符串之前会有一些延迟。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐