评估每个环境变量并将其设置回ubuntu

时间:2016-04-06 11:03:06

标签: bash shell ubuntu environment-variables

我试图编写一个shell脚本来读取所有环境变量,为包含的env评估它们。变量与其中的变量,并在评估后重新导出。

示例 - 我发布的环境变量如下:

echo $JVM_OPTS                 
-Djava.awt.headless=true -Xmx1600m  -Djava.rmi.server.hostname=${CONTAINER_IP} -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Duser.language=en -Duser.country=US -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:CMSIncrementalDutyCycleMin=0


echo $CONTAINER_IP 
10.44.214.63

现在,我需要评估" JVM_OPTS "变量并将$ JVM_OPTS中$ {CONTAINER_IP}的值替换为10.44.214.63。最后,将此评估值设置回JVM_OPTS变量。

示例输出:

echo $JVM_OPTS                 
    -Djava.awt.headless=true -Xmx1600m  -Djava.rmi.server.hostname=10.44.214.63 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Duser.language=en -Duser.country=US -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:CMSIncrementalDutyCycleMin=0

我的分析到目前为止: 我编写了以下代码来完成任务

#!/bin/bash

for path in $(printenv); do
    path=`eval echo $path`
    echo $path
done

printenv将给予整个环境。变量和值。我只需要名称,然后使用该值。

如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

尝试

for path in $(compgen -e) ; do
    eval "$path=\"${!path//\"/\\\"}\""
done

但请参阅Why should eval be avoided in Bash, and what should I use instead?了解有关使用eval的缺陷的信息。

compgen -e打印环境变量列表。

${!path}计算名称为$path的变量的值。

//\"/\\\""替换为变量值中的\",以保留嵌入的双引号。