如何将Azure CLI执行产生的错误输出存储到变量中
Azure CLI 错误输出捕获方案
Azure CLI 的错误信息默认输出到标准错误流(stderr),常规变量赋值只会捕获标准输出流(stdout)内容,这是无法捕获报错的核心原因,不同shell环境下的解决方法如下:
Bash/Zsh 环境
- 合并捕获标准输出和错误输出到同一变量:
只需将stderr重定向到stdout即可,示例如下:
执行后# 执行命令并捕获所有输出到result变量 result=$(az group show -n "rgname" 2>&1)$result会完整包含(ResourceGroupNotFound) Resource group 'rgname' could not be found这类错误信息。 - 分离捕获标准输出和错误输出(便于后续逻辑判断):
# 分别存储输出内容、错误内容,同时获取命令退出码 stdout=$(az group show -n "rgname" 2>./tmp_cli_err) stderr=$(cat ./tmp_cli_err && rm -f ./tmp_cli_err) exit_code=$? if [[ $exit_code -eq 0 ]]; then # 执行成功,正常解析stdout内容,可搭配--query参数提取字段 echo "查询成功,资源组信息:$stdout" else # 执行失败,读取stderr的报错内容 echo "查询失败,错误信息:$stderr" fi
PowerShell 环境
通过重定向和内置退出码变量实现捕获:
# 捕获所有输出到result变量 $result = az group show -n "rgname" 2>&1 if ($LASTEXITCODE -ne 0) { $err_msg = $result.ToString() Write-Host "查询失败,错误信息:$err_msg" } else { Write-Host "查询成功,资源组信息:$result" }
优化技巧
你可以在Azure CLI命令后添加--only-show-errors参数,过滤冗余的警告信息,确保捕获到的错误内容仅包含核心报错。
内容的提问来源于stack exchange,提问作者Ramakrishna Yelduti
相关产品推荐
相关产品推荐

