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

Bash脚本中如何捕获AWS CLI命令的执行错误?

Bash实现SecretsManager错误捕获的修正方案

你的脚本问题在于仅捕获了jq命令的错误输出,而AWS CLI的错误信息直接打印到终端,导致还没进入判断流程就看到报错。以下是两种可靠的修正方案:

方案一:捕获所有输出并匹配错误信息

通过子shell包裹整个命令链,将所有stdout和stderr统一捕获到变量中,再判断是否包含目标错误:

# 捕获命令链的全部输出(包括AWS和jq的错误)
command=$((aws secretsmanager get-secret-value --secret-id "${secret_name}" --query SecretString --output text | jq .) 2>&1)

if [[ "${command}" =~ "An error occurred (ResourceNotFoundException)" ]]; then
  echo "Configuration does not exist in SecretsManager. Unable to initialize Metaflow settings"
else
  echo "Configuration exists in SecretsManager. Initializing Metaflow settings"
  echo "${command}" > ~/.metaflowconfig/config.json
fi

方案二:基于命令退出码判断(更可靠)

利用AWS CLI的退出状态码判断执行结果,避免依赖错误文本的匹配,稳定性更高:

# 执行AWS命令,将stderr丢弃(不直接输出错误),保存stdout到变量
secret_output=$(aws secretsmanager get-secret-value --secret-id "${secret_name}" --query SecretString --output text 2>/dev/null)
# 获取命令退出码(0为成功,非0为失败)
aws_exit_code=$?

if [[ ${aws_exit_code} -ne 0 ]]; then
  echo "Configuration does not exist in SecretsManager. Unable to initialize Metaflow settings"
else
  # 格式化JSON并写入配置文件
  formatted_secret=$(echo "${secret_output}" | jq .)
  echo "Configuration exists in SecretsManager. Initializing Metaflow settings"
  echo "${formatted_secret}" > ~/.metaflowconfig/config.json
fi

关键修正点

  • 给变量${secret_name}添加双引号,避免参数含空格时出错
  • 方案一中用子shell(...)包裹命令链,再统一重定向2>&1,确保所有错误都被捕获到变量
  • 方案二中通过$?获取命令退出码,比匹配错误文本更可靠(错误信息可能随AWS CLI版本变化)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:35:15