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

Bash脚本中定义的Alias无法触发问题排查

解决Bash脚本中别名无法执行的问题

问题原因

虽然你开启了shopt -s expand_aliases,但通过${cluster}这种变量替换的方式执行命令时,Bash不会自动展开别名——别名是针对交互式命令行的输入展开设计的,变量替换后的字符串不会触发别名解析,因此脚本会把pepprodeuold当作普通命令去查找,导致"command not found"错误。

解决方案

推荐放弃使用别名,改用关联数组存储集群与对应kubectl命令的映射,这种方式更清晰、可靠,也避免了别名展开的问题。以下是修改后的脚本:

#!/usr/bin/env bash 
PROFILE="env-prod"
REGIONS=("eu-central-1" "us-east-1")
CLUSTERS_CONTEXT=("pepprodeu" "pepprodus" "pepprodeuold")

# 用关联数组存储集群对应的kubectl命令,替代别名
declare -A CLUSTER_COMMANDS=(
    ["pepprodeuold"]="kubectl config use-context arn"
    ["pepprodeu"]="kubectl config use-context arn1"
    ["pepprodus"]="kubectl config use-context arn2"
)

function clean_old_files ()
 {
    echo "##################################### Cleaning old Files ###############################################"
    echo "Clean up Previous Reports"
    rm -rf eks_deployment_report.txt eks_node_report.txt
    get_eks_report
}

function get_deployment_count()
 {
    echo "##################################### Generating EKS DEPLOYMENT Report #####################################"
    echo "No of Deployments in ${cluster}"  >> eks_deployment_report.txt
    kubectl get deployments --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace}{"	"}{.metadata.name}{"	"}{.spec.replicas}{"
"}{end}' | awk '$3 > 0 {count[$1]++} END {for (namespace in count) {print namespace, count[namespace]}}' | column -t | tee -a eks_deployment_report.txt
    echo "No of Nodes in ${cluster}" >> eks_node_report.txt
    kubectl get nodes --no-headers | wc -l | tee -a eks_node_report.txt
}

function get_eks_report() {
    for cluster in "${CLUSTERS_CONTEXT[@]}"; do
            echo "######################################## Get EKS Details in ${cluster} Cluster ########################################"
            echo "${cluster}"
            # 执行关联数组中对应的命令
            ${CLUSTER_COMMANDS[$cluster]}
            get_deployment_count
        done
}

clean_old_files

注意:原脚本中tee命令未加-a参数,会直接覆盖文件内容,修改为tee -a后可实现内容追加,避免后续集群的报告覆盖之前的结果。

备选方案(不推荐)

如果坚持要使用别名,可通过eval命令触发别名展开,修改get_eks_report函数中的执行逻辑:

eval "${cluster}"

但eval存在潜在安全风险,且可读性不如关联数组方式,因此不推荐使用。

内容的提问来源于stack exchange,提问作者Devops-Learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:05:19