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

如何在Bash的while循环中结合git status返回值实现git仓库判断及提交操作

解决方案

修正后的完整代码

set -e 

gitrepo=true

while [ "$gitrepo" = true ]; do
  # 执行git status并捕获输出,错误流丢弃避免冗余提示,加|| true防止set -e触发脚本直接退出
  output=$(git status 2>/dev/null) || true
  if [[ $? -ne 0 ]]; then
     echo "当前目录不存在.git仓库"
     gitrepo=false
     break
  else
    read -p "Commit message: " commit
    git commit -am "$commit"
    # 若只需执行一次提交,保留下方break;若要循环提交可删除
    break
  fi  
done

关键修改说明

  • 原代码里$?取的是上一条命令的退出码,没有提前执行git status的话这个值没有参考意义,所以把git status的执行逻辑放到了判断语句之前,同时保留了你要把输出存到output变量的需求。
  • 修复了变量赋值的语法错误:给变量赋值时不需要加$前缀,原代码的$gitrepo=false会被识别为执行命令,正确写法为gitrepo=false。
  • 加了break语句,检测到非git仓库时直接跳出循环,逻辑更直接;提交分支的break可根据你的需求决定是否保留,删掉的话会循环提示你输入提交信息,适合需要多次提交的场景。
  • 因为你开了set -e参数,命令执行失败会直接终止脚本,所以在git status执行语句末尾加了|| true,保证就算git status返回非0值,也能走到你后续的判断逻辑里输出自定义提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:06:03