Я пытаюсь написать скрипт оболочки, который читает все переменные окружения, оценивает их на предмет включенного 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 » и заменить значение $ {CONTAINER_IP} в $ JVM_OPTS на 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 дал бы весь env. переменная вместе со значениями. Мне просто нужно имя, а затем использовать значение.

Как этого добиться?

2 ответа2

1

В основном, решение в вашем вопросе: eval.

eval export JVM_OPTS=\"$JVM_OPTS\"
0

Следующее сработало для меня.

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

Как размещено на https://stackoverflow.com/a/36449824/1925997

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .