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

Bash单行实现匹配输出true、GITHUB_ENV写入及Git错误解决

解决检测package.json变更并设置GitHub环境变量的问题

问题描述

原使用命令:

echo "PACKAGE_CHANGED=$(git diff --name-only abcabc abcabd | grep -Fqx package.json && echo \"true\")" >> "$GITHUB_ENV"

期望实现:当package.json有变更时,向$GITHUB_ENV写入PACKAGE_CHANGED=true;无变更时要么写入PACKAGE_CHANGED=,要么不执行写入。但遇到两个问题:

  • 无变更时出现Error: Process completed with exit code 1错误
  • 修改package.json版本后出现fatal: bad object ...错误

修正后的命令

方案1:无变更时写入空值

echo "PACKAGE_CHANGED=$(git diff --name-only abcabc abcabd | grep -Fqx package.json && echo "true" || echo "")" >> "$GITHUB_ENV"

方案2:无变更时不写入任何内容

git diff --name-only abcabc abcabd | grep -Fqx package.json && echo "PACKAGE_CHANGED=true" >> "$GITHUB_ENV"

问题解决说明

  1. 退出码错误修复:
    原命令中,当grep未匹配到package.json时会返回非0退出码,触发GitHub Actions的步骤错误。方案1通过|| echo ""确保无论grep结果如何,最终命令都返回0退出码;方案2利用短路逻辑,仅在grep匹配成功时执行写入操作,从根源避免无变更时的错误。

  2. bad object错误修复:
    该错误是因为指定的提交哈希在当前仓库中不存在(GitHub Actions默认浅克隆仓库,未拉取完整历史)。解决方式:

    • 执行命令前添加步骤拉取完整历史:git fetch --unshallow
    • 改用分支名替代提交哈希(比如比较当前分支与main分支:git diff --name-only main HEAD),避免使用不存在的哈希值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:57:17