评估每个环境变量并将其重新设置到 ubuntu

评估每个环境变量并将其重新设置到 ubuntu

我正在尝试编写一个 shell 脚本,读取所有环境变量,评估其中包含的环境变量,并在评估后重新导出。

例子- 我有一个像这样暴露的环境变量:

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选项“变量并将$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

基本上,解决方案就在你的问题中:eval。

eval export JVM_OPTS=\"$JVM_OPTS\"

答案2

以下对我有用。

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

正如发布于https://stackoverflow.com/a/36449824/1925997

相关内容