评估每个环境变量并将其重新设置为 ubuntu
Evaluate each environment variable and set it back in 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_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 会给出整个环境。变量连同值。我只需要名称,然后使用值。
如何实现?
尝试
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
.
的变量的值
//\"/\\"
将变量值中的 "
替换为 \"
,以保留嵌入的双引号。
我正在尝试编写一个 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_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 会给出整个环境。变量连同值。我只需要名称,然后使用值。
如何实现?
尝试
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
.
//\"/\\"
将变量值中的 "
替换为 \"
,以保留嵌入的双引号。