bash - 无法在 bash 中抑制或使用 AWS-CLI 错误
问题描述
我有一个简单的脚本,我想使用 AWS CLI 显示来自 AWS 的特定信息。
例如:
get_cluster_name() {
EKS_NAME=$(aws eks describe-cluster --name ${CUSTOMER_NAME}) && \
echo $EKS_NAME | jq -r .cluster.name}
集群存在时的输出是好的,我得到集群的名称。
当集群不存在时,我得到:
An error occurred (ResourceNotFoundException) when calling the DescribeCluster operation: No cluster found for name: example_cluster.
我的目标是在找不到集群时获得空输出。为此,我想在条件中使用返回码或在输出中使用字符串查找。
问题是输出不是标准输出或标准错误,因此我什至不能将它定向到 /dev/null 只是为了消除错误。
我怎样才能使这段代码正常工作?:
[[ $(get_cluster_name) =~ "ResourceNotFoundException" ]] && echo "EKS Cluster:....$(get_cluster_name)"
或者
[[ $(get_cluster_name) ]] && echo "EKS Cluster:....$(get_cluster_name)"
谢谢你。
解决方案
这是对我的评论的考虑和扩展。stderr
当没有找到集群时,您再次收到响应,因此这使得这非常简单。
用于抑制stderr>2 /dev/null
中的返回消息。然后使用ret=$?
捕获返回码。
get_cluster_name() {
EKS_NAME=$(aws eks describe-cluster --name ${CUSTOMER_NAME} 2> /dev/null);
ret=$?
if [ $ret -eq 0 ]; then
echo $EKS_NAME | jq -r .cluster.name
return 0
else
return $ret
fi
}
现在,当您调用该函数时,您可以执行相同的操作,因为您的错误将从aws
命令向上传播到堆栈:
cluster=$(get_cluster_name)
ret=$?
if [ $ret -eq 0 ]; then
echo $cluster
else
echo "failed to find cluster. Error code: $ret"
fi
举个例子。
推荐阅读
- sql - 在 select 语句中使用函数,我可以在同一个 select 语句中使用函数的结果吗?
- php - 用 PHP 安排每月一次的活动
- python - 查找树中的所有后代
- python - scrapy - 使用正确的扩展名下载
- pyspark - Spark dataframe date_add 函数在不工作时带有大小写
- kubernetes - GKE 中的容器无法 ping 同一网络上的计算实例
- assets - Akeneo 调整资产变化的大小保持比例
- java - 如何从活动中启动特定的 tablayout 片段
- ios - react-navigation-fluid-transitions 共享图像闪烁
- python - PyQt5 TableView 杀死内核