簡體   English   中英

無法在 bash 中抑制或使用 AWS-CLI 錯誤

[英]cant suppress or use an AWS-CLI error in bash

我有一個簡單的腳本,我想使用 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響應,因此這非常簡單。

使用>2 /dev/null抑制 stderr 中的返回消息。 然后使用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

舉個例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM