如何正确捕获gh workflow run <ID>命令的执行输出?
原因
gh 工具默认会检测当前运行环境是否为交互式终端(TTY),如果输出目标不是直连终端(比如变量赋值、管道传递、重定向到文件的场景),会自动关闭默认的状态提示类输出,这就是你直接在终端执行能看到内容,但是接变量、重定向文件都拿不到输出的根本原因。
可行方案
方案1:通过官方环境变量强制输出TTY内容
gh 提供了全局环境变量GH_FORCE_TTY,设置为非空值时,会强制按照交互式终端的逻辑输出内容,不受运行环境检测影响,适配所有捕获输出的场景:
- 变量赋值场景用法:
MYVAR=$(GH_FORCE_TTY=1 gh workflow run 16744616) echo "$MYVAR"
- 重定向到文件场景用法:
GH_FORCE_TTY=1 gh workflow run 16744616 &> output.txt
执行后就能拿到和终端直出完全一致的带对勾的提示内容。
方案2:使用结构化JSON输出(适合自动化脚本场景)
如果你是写自动化脚本需要捕获执行结果,不需要人类友好的提示文案,可以直接加--json参数输出结构化数据,这种输出完全不受TTY检测逻辑影响,内容格式稳定,不会因为工具版本升级调整提示文案导致解析失败:
# 可自定义需要返回的字段,比如运行ID、工作流名、分支、触发状态等 gh workflow run 16744616 --json id,name,branch,status,event
内容的提问来源于stack exchange,提问作者Sergy Saveljev
相关产品推荐
相关产品推荐

