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

如何将hub命令产生的多行输出完整存储到Shell变量中

问题原因

hub 命令执行时会将不同类型的内容分别输出到标准输出(stdout,文件描述符1)和标准错误(stderr,文件描述符2),你使用 $() 捕获输出时默认仅捕获 stdout 内容,其余输出到 stderr 的内容会直接打印到终端,不会存入变量。你遇到的场景里只有第二行内容是输出到 stdout 的,所以只捕获到了这一行。

实现方案

第一步:完整捕获所有输出

在命令末尾添加 2>&1 将 stderr 重定向到 stdout,这样所有输出都会被捕获到变量中,不会直接打印给用户:

output=$(hub pull-request -p -b MyOrg:main -h Test_Branch -m "testing" 2>&1)

第二步:匹配错误关键词输出自定义提示

使用 grep 的静默模式(-q)匹配错误关键词,匹配成功后输出自定义报错即可:

if grep -q "Error creating pull request" <<< "$output"; then
    # 此处可替换为你需要的自定义报错信息
    echo "PR 创建失败:当前分支已存在关联的 Pull Request,无需重复创建"
    exit 1
fi
补充说明
  • 上述写法中 <<< 是 Bash 的 Here String 语法,用于将变量内容直接传递给 grep 作为输入
  • grep 的 -q 参数不会输出任何匹配结果,仅通过返回状态码标识是否匹配到内容,适合逻辑判断场景
  • 如果使用非Bash的兼容shell,可将判断逻辑替换为 if echo "$output" | grep -q "Error creating pull request"; then,兼容性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:45:03