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

如何仅在另一命令有输出时执行bash命令?

正确实现Git缓存差异检查与提交的Bash命令

你遇到的问题核心在于git diff的退出码逻辑和预期相反:

  • 当目标路径没有差异时,git diff HEAD ./path/to/cache返回退出码0(bash判定为"成功"),所以&&会触发后面的git add,这不符合需求;
  • 当目标路径存在差异时,git diff返回退出码1(bash判定为"失败"),此时&&不会执行后续命令,完全和需求反向。

方案一:简洁写法(用--quiet配合||)

最简洁的实现是利用git diff --quiet(仅返回退出码,不输出差异内容),结合||(当前面命令失败时执行后续命令):

git diff --quiet HEAD -- ./path/to/cache || git add ./path/to/cache

这里的--是为了避免路径名被Git误判为分支或标签,提升命令鲁棒性。当路径存在差异时,git diff --quiet返回1,||会触发git add;无差异时返回0,跳过git add。

方案二:显式逻辑分支(用if语句)

如果需要更清晰的逻辑分支(比如出错时做额外处理),可以用if语句:

if ! git diff --quiet HEAD -- ./path/to/cache; then
    # 仅当存在差异时执行add
    git add ./path/to/cache
fi

!符号会反转命令的退出码判断,当git diff --quiet返回1(有差异)时,!将其转为"真",进入分支执行git add。

内容的提问来源于stack exchange,提问作者Rafid Muhymin Wafi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:55:37