在另一个环境中解析env

时间:2016-02-19 10:28:07

标签: linux bash shell docker kubernetes

所以我想打印包含其他变量的env变量。 例如,我有:

MY_VARS="My var are:\nVAR1 = ${MY_VAR1}\nVAR2 = ${MY_VAR2}"
MY_VAR1=var1
MY_VAR2=var2

我想以这样的方式实现:

printf "${MY_VARS}" > my.conf

printf "$(echo ${MY_VARS})" > my.conf

得到my.conf文件中的内容:

My var are:
VAR1 = var1
VAR2 = var2

但它起作用了。 是否有可能做这样的事情? 我需要它与Kubernetes一起使用,所以我可以在我的ReplicationController中设置env并将其与Kubernetes envs一起使用,例如SERVICE_HOSTSERVICE_PORT 另一个问题是Kubernetes正在将我的MY_VARS变量更改为多行内部容器,因此它看起来像:

MY_VARS=My var are:
VAR1 = ${MY_VAR1}
VAR2 = ${MY_VAR2}

希望非常清楚:)

我的解决方案:

while read -r line
do
  printf "$line\n" >> conf.tmp
done <<< "$CONFIG"

while read -r line
do
  eval echo $line >> conf
done < conf.tmp

我将CONFIG变量传递给容器,此变量包含具有IP和端口的Kubernetes服务变量。 由于eval无法解析\n,我不得不两次。

2 个答案:

答案 0 :(得分:1)

使用bash,您可以执行indirect references但不会直接替换变量的值,只有在从bash终端使用时才会替换它。

答案 1 :(得分:0)

你必须先定义变量。以下脚本打印出您想要的内容:

MY_VAR1=var1
MY_VAR2=var2
MY_VARS="My var are:\nVAR1 = ${MY_VAR1}\nVAR2 = ${MY_VAR2}"
printf "${MY_VARS}"