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!控制台上出现一些短语(例如),我想将控制权返回给终端

破折号

从表面上看,用自定义循环替换当前等待('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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从bash并行运行多个脚本,而无需将输出打印到控制台

将ENTRYPOINT bash脚本的输出重定向到控制台

我的bash脚本执行时未显示控制台窗口

使用bash脚本获取控制台宽度

抑制bash脚本中的控制台错误

Bash脚本:在控制台中自动执行命令

如何使用 bash 从 groovy 脚本控制台 (Jenkins) 向 python 发送单个流水线命令?

使用一个 bash 脚本运行两个节点服务器并接收控制台日志

相同命令的行为(在Bash下)-在控制台中一对一运行,而不是作为单个脚本运行

在cron上运行的bash脚本使某些命令失败

如何摆脱bash控制台的暂停?

从运行bash脚本构建的命令

从bash脚本运行Vim命令

从bash脚本运行mongo命令

运行Bash命令的Python脚本

从 bash 脚本运行“mysql”命令

从bash脚本运行lynx时如何输出命令?

将 bash shell 脚本的输出作为 shell 命令运行?

运行{命令vs通过bash脚本} +重定向输出

在bash脚本和终端中运行命令时的不同输出

显示丢失命令的 Bash 脚本

php exec并运行bash脚本直到完成

如何运行bash脚本并在Conky中显示任何输出?

直到Bash中的命令

bash:从控制台运行程序,而不会阻止程序运行或产生线路噪音

Bash脚本,自动超时

继续运行命令,直到输出与以前在Bash中的运行不同为止

在bash脚本中,从STDOUT到LOG,从STDERR到LOG和控制台

将 bash 脚本粘贴到控制台而无需退出调用