You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在bash脚本中解析自定义CLI命令的终端回显字符串

捕获CLI命令全部终端输出的解决方案

核心原因

你无法捕获到全部回显内容,是因为大多数交互式CLI的提示语、运行状态、错误信息默认输出到标准错误流(stderr),而非你常规捕获的标准输出(stdout)。部分认证类命令出于安全考虑甚至会直接写入终端设备/dev/tty,完全不走标准IO流,因此常规的输出捕获逻辑会遗漏内容。

方案1:合并标准流捕获(适配90%以上场景)

绝大多数场景下,你只需要将stderr重定向合并到stdout,就能拿到全部输出内容,该方案不依赖命令退出码,哪怕命令优雅失败返回0也可正常识别:

  • 基础捕获写法:
# 2>&1 表示将标准错误流重定向到标准输出流
auth_output=$(custauth 2>&1)
  • 搭配自动输入密码+失败校验的完整示例:
# 自动输入密码并合并捕获所有标准流输出
auth_output=$(echo "你的密码明文" | custauth 2>&1)

# 不区分大小写检查输出中是否包含失败关键词
if grep -qi "fail" <<< "$auth_output"; then
    echo "认证失败,执行后续失败逻辑"
    exit 1
fi

方案2:伪终端捕获(适配命令直接写终端的特殊场景)

如果命令直接写入/dev/tty不走标准流,你需要用伪终端(PTY)模拟真实终端运行命令,用系统自带的script工具即可实现全回显捕获:

  • Linux 环境写法:
# -q 开启静默模式不输出script自身日志,-c 指定运行的命令,/dev/null 不生成本地日志文件
auth_output=$(echo "你的密码明文" | script -q -c "custauth" /dev/null)
  • macOS 环境写法:
auth_output=$(echo "你的密码明文" | script -q /dev/null custauth)

捕获完成后即可正常检查输出内容中的任意关键词,不会遗漏任何终端回显的文本。

内容的提问来源于stack exchange,提问作者btrballin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:57:02