如何在bash shell中等待命令输出指定文本?
实现方案
你原来的伪代码中需要给currentline赋值为目标进程逐行输出的内容,单独用sleep轮询无法直接读取已启动进程的输出流,且原判断语法不符合bash规范。推荐使用管道直接捕获进程输出的方式实现,不需要依赖本地日志文件,适配Codemagic CI环境:
# 将下方的./your-start-command替换为你实际要执行的命令 ./your-start-command 2>&1 | while IFS= read -r currentline; do # 可选:打印输出到CI日志,方便排查问题 echo "$currentline" # 匹配到目标字符串就退出循环,执行后续逻辑 if [[ "$currentline" == *"the text output I'm waiting for"* ]]; then break fi done # 此处写匹配到就绪标识后要执行的后续操作 echo "进程已就绪,开始执行后续任务"
说明
- 命令开头加
2>&1是为了同时捕获标准输出和标准错误的内容,如果你的目标字符串只会输出到标准输出,可以去掉这个参数 - 整个流程不需要用到
tail、不需要指定日志文件路径,完全符合CI环境限制 - 目标进程输出完就绪标识后不会被终止,会继续在后台运行,不影响后续逻辑执行
内容的提问来源于stack exchange,提问作者buttonsrtoys
相关产品推荐
相关产品推荐

