Bash脚本运行命令并显示控制台输出,直到出现某些短语或超时

我正在尝试构建一个bash脚本来运行Web服务器。我需要脚本在控制台中显示Web服务器的输出,直到控制台上出现特定字样,指示服务器初始化成功完成或发生某些错误。

我能够显示控制台输出,直到发生超时:

#!/bin/bash
(exec /opt/aspnetcore-runtime-3.0.0-linux-x64/dotnet /opt/app/Launcher.dll &) | (timeout --foreground 6 cat; cat > /dev/null &)

如果错误早于6秒钟发生,则Web服务器停止并且控制权返回到终端,这是所需的行为。

但是,如果Web服务器初始化在2秒内成功完成,则用户必须再等待4秒,直到脚本完成。一旦控制台上出现某些短语(例如SUCCESS INIT!),我想将控件返回到终端。

a21221266 回答:Bash脚本运行命令并显示控制台输出,直到出现某些短语或超时

在表面上,用自定义循环替换当前的等待(“ cat”),该循环将在“ SUCCESS INIT!”成功时退出。被发现将解决问题

可以使用这样的循环来实现

while read x && echo "$x" && [ "$x" != "SUCCESS INIT!" ] ; do : ; done

和组合的命令

(Launch-command &) | (timeout --foreground 6 sh -c 'while read x && echo "$x" && [ "$x" != "SUCCESS INIT!" ] ; do : ; done' ; cat > /dev/null &)

不是很优雅。如果可以,请将“ timeout ... while ...”放在单独的脚本中。我没有测试,但是应该可以工作:

#! /bin/bash
# wait-line.sh
timeout --foreground "$1" sh -c "while read x && echo "$x" && [ "$x" != "$2" ] ; do : done "
cat > /dev/null

然后原始命令行看起来像

( Launch-command ... & ) | ( wait-line.sh 6 "SUCCESS INIT!" &)
本文链接:https://www.f2er.com/3158883.html

大家都在问