【问题标题】:Using a table to create custom environment variable sets使用表创建自定义环境变量集
【发布时间】:2020-12-19 14:26:24
【问题描述】:

我的项目有多个环境变量。 管道的不同部分需要这些的不同子集。

我创建变量并制作如下表格:

timestamp=01-02-03T04:05
version=1.2.3

table='
VAR_NAME   DJANGO_ENV   K8S_ENV
timestamp  ✅           ✅
version    ✅           ⛔️
'

现在我想填充DJANGO_ENVK8S_ENV

DJANGO_ENV="timestamp=01-02-03T04:05 version=1.2.3"
K8S_ENV="timestamp=01-02-03T04:05"

...所以我可以运行$K8S_ENV create_k8s_infra

怎么做?

(注意:我正在回答我自己的问题,以防代码对某人有用)

【问题讨论】:

    标签: bash environment-variables


    【解决方案1】:
    timestamp=01-02-03T04:05
    version=1.2.3
    
    table='
    VAR_NAME   DJANGO_ENV   K8S_ENV
    timestamp  ✅           ✅
    version    ✅           ⛔️
    '
    
    {
        read -r # first line is blank
        read -r first_nonblank_line
        read -r -a env_names <<< "$first_nonblank_line"
        echo "Env-names: ${env_names[@]}"
    
        while read -r line; do 
            if [[ -n $line ]]; then
                echo
                echo "line=$line"
    
                read -r -a arr <<< "$line"
    
                nCols=${#arr[@]}
    
                var_name=${arr[0]}
    
                for (( i=1; i<${nCols}; i++ )); do
                    echo "    Col#${i} "
                    if [[ ${arr[i]} == "✅" ]]; then
                        env_name=${env_names[i]}
                        echo "    Adding $var_name to $env_name"
                        printf -v "$env_name" '%s' "${!env_name} $var_name=\"${!var_name}\""
                    fi
                done
            fi
        done
    } <<< "$table"
    
    echo "DJANGO_ENV: $DJANGO_ENV"
    echo "K8S_ENV: $K8S_ENV"
    

    输出:

    > ./table.sh 
    Env-names: VAR_NAME DJANGO_ENV K8S_ENV
    
    line=timestamp  ✅           ✅
        Col#1 
        Adding timestamp to DJANGO_ENV
        Col#2 
        Adding timestamp to K8S_ENV
    
    line=version    ✅           ⛔️
        Col#1 
        Adding version to DJANGO_ENV
        Col#2 
    DJANGO_ENV:  timestamp=01-02-03T04:05 version=1.2.3
    K8S_ENV:  timestamp=01-02-03T04:05
    

    【讨论】:

      【解决方案2】:

      尝试评估:

      eval $K8S_ENV create_k8s_infra
      

      如果不起作用,您可以单独执行以下操作:

      eval $K8S_ENV
      create_k8_infra
      

      (第一次可能没有成功的原因:here

      除了使用 printf 来填充变量,您也可以直接完成:

      timestamp=01-02-03T04:05
      version=1.2.3
      
      table='
      VAR_NAME   DJANGO_ENV   K8S_ENV
      timestamp  ✅           ✅
      version    ✅           ⛔️
      '
      
      {
          read -r # first line is blank
          read -r first_nonblank_line
          read -r -a env_names <<< "$first_nonblank_line"
          echo "Env-names: ${env_names[@]}"
      
          while read -r line; do 
              if [[ -n $line ]]; then
                  echo
                  echo "line=$line"
      
                  read -r -a arr <<< "$line"
      
                  nCols=${#arr[@]}
      
                  var_name=${arr[0]}
      
                  for (( i=1; i<${nCols}; i++ )); do
                      echo "    Col#${i} "
                      if [[ ${arr[i]} == "✅" ]]; then
                          echo "    Adding $var_name to ${env_names[i]}"
                          eval ${env_names[i]}=\"\${${env_names[i]}} $var_name=\"${!var_name}\"\"
                      fi
                  done
              fi
          done
      } <<< "$table"
      
      echo "DJANGO_ENV: $DJANGO_ENV"
      echo "K8S_ENV: $K8S_ENV"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-17
        • 1970-01-01
        相关资源
        最近更新 更多