是否有可能以某种方式通过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] 举报,一经查实,本站将立刻删除。