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

Bash脚本while循环使用curl对比返回值报command not found错误

错误原因

Bash 中while关键字后默认会将后续内容作为可执行命令运行,判断命令退出码是否为0来决定是否进入循环。你直接裸写"$(curl ...)" == "Running"的比较表达式时,Shell会先执行curl命令拿到返回值(比如Running),随后尝试将这个返回值作为命令名执行,把==、"Running"作为传给该命令的参数,系统中不存在名为Running的命令,就会抛出Running: command not found的报错。

Bash 不支持直接裸写A == B形式的字符串比较,这类判断逻辑必须放在专用的测试结构中执行。

修正后可直接运行的脚本

优先推荐Bash原生双中括号写法,容错性更高:

while [[ "$(curl -sS --user tc-bot:"$TC_BOT_PASSWORD" -X GET "http://teamcity-server:8111/teamcity/app/rest/server/backup")" == "Running" ]]
do
  echo "Backup is running"
  sleep 10
done

如果需要兼容POSIX标准Shell,可以使用单中括号的test语法:

while [ "$(curl -sS --user tc-bot:"$TC_BOT_PASSWORD" -X GET "http://teamcity-server:8111/teamcity/app/rest/server/backup")" = "Running" ]
do
  echo "Backup is running"
  sleep 10
done
优化说明
  • 给curl增加了-sS参数:-s是静默模式,屏蔽默认的进度统计、请求冗余输出,避免干扰结果判断;-S配合静默模式使用,仅在请求出错时打印错误信息,方便排查问题
  • 所有命令替换结果都用双引号包裹,避免返回值含特殊字符、空白时触发语法错误
  • 单中括号是POSIX标准写法,字符串比较的标准操作符为单个=;双中括号是Bash专属扩展语法,支持==作为比较操作符,写法更宽松
  • 如果接口返回可能携带首尾换行、空格等不可见空白,可以在curl命令后拼接| xargs自动去除首尾空白,比如将命令替换部分写为"$(curl -sS ... | xargs)",避免不可见字符导致判断逻辑失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:57:31