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

如何修复Bash中执行AWS CLI命令最多重试5次直到成功的报错脚本

错误原因

报错[0: command not found的根源是AWS CLI命令中--query参数的内容没有用引号包裹,Shell会将参数中的Connections[0]里的方括号识别为通配符进行解析,异常场景下会把[误判为test命令的开头,触发语法错误。

修复后完整脚本
#!/bin/bash
retry_times=5
counter=0
# 注意提前替换为你实际的 replication instance ARN,原脚本未赋值该变量会导致查询异常
ri_arn="your-replication-instance-arn"

# 首次查询状态,加--output text直接返回纯文本,避免JSON返回自带双引号的干扰
ri_status=$(aws dms describe-connections \
  --filter "Name=replication-instance-arn,Values=$ri_arn" \
  --query='Connections[0].Status' \
  --region us-east-1 \
  --output text)

until [[ $ri_status == "successful" ]]
do
    ((counter++))
    if (( counter > retry_times )); then
        echo "Failed! 已达到最大重试次数${retry_times}次"
        exit 1
    fi
    echo "状态未同步,正在进行第${counter}次重试..."
    sleep 5
    # 重试查询
    ri_status=$(aws dms describe-connections \
      --filter "Name=replication-instance-arn,Values=$ri_arn" \
      --query='Connections[0].Status' \
      --region us-east-1 \
      --output text)
done

echo "连接状态已变为successful,查询成功"
关键修改说明
  • 给--query参数的内容用单引号包裹,避免Shell解析方括号语法,从根源解决[0: command not found报错
  • 新增--output text参数,让AWS CLI直接返回纯文本状态值,不需要额外处理JSON返回自带的双引号
  • 调整重试计数逻辑,首次查询失败后才开始计数,最多重试5次符合需求
  • 把老旧的反引号``替换为$()捕获命令输出,嵌套场景下兼容性更好
  • 给filter参数加双引号,避免ARN包含特殊字符时解析异常
  • 调整判断顺序:先计数再判断是否达到最大重试次数,避免多执行一次无效查询

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:54:00