bash 中无法抑制或使用 AWS-CLI 错误
cant suppress or use an AWS-CLI error in bash
我有一个简单的脚本,我想使用它来显示来自 AWS 的特定信息
AWS CLI。
例如:
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.
我的目标是在找不到集群时获得空输出。
为此,我想在输出中的条件或字符串查找中使用 return 代码。
问题是输出不是标准输出或标准错误,因此
我什至无法将其定向到 /dev/null 只是为了消除错误。
我怎样才能使这段代码正常工作?:
[[ $(get_cluster_name) =~ "ResourceNotFoundException" ]] && echo "EKS Cluster:....$(get_cluster_name)"
或
[[ $(get_cluster_name) ]] && echo "EKS Cluster:....$(get_cluster_name)"
谢谢。
这是对我的评论的考虑和扩展。当没有找到集群时,您再次收到 stderr
响应,因此这非常简单。
使用 >2 /dev/null
抑制 stderr 中的 return 消息。然后使用ret=$?
捕获return代码。
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
举个例子。
我有一个简单的脚本,我想使用它来显示来自 AWS 的特定信息 AWS CLI。
例如:
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.
我的目标是在找不到集群时获得空输出。 为此,我想在输出中的条件或字符串查找中使用 return 代码。
问题是输出不是标准输出或标准错误,因此 我什至无法将其定向到 /dev/null 只是为了消除错误。
我怎样才能使这段代码正常工作?:
[[ $(get_cluster_name) =~ "ResourceNotFoundException" ]] && echo "EKS Cluster:....$(get_cluster_name)"
或
[[ $(get_cluster_name) ]] && echo "EKS Cluster:....$(get_cluster_name)"
谢谢。
这是对我的评论的考虑和扩展。当没有找到集群时,您再次收到 stderr
响应,因此这非常简单。
使用 >2 /dev/null
抑制 stderr 中的 return 消息。然后使用ret=$?
捕获return代码。
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
举个例子。