我正在尝试构建一个 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!
控制台上出现一些短语(例如),我想将控制权返回给终端。
从表面上看,用自定义循环替换当前等待('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 &)
不是很优雅。如果可以,请将“超时...而...”放在单独的脚本中。我没有测试,但它应该工作:
#! /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!" &)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句