Avalie cada variável de ambiente e configure-a de volta no Ubuntu

0

Estou tentando escrever um script de shell que leia todas as variáveis de ambiente, avalie-as para env incluído. variável com neles e reexportação após a avaliação.

Exemplo - Eu tenho uma variável de ambiente exposta assim:

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

Agora, preciso avaliar a variável " JVM_OPTS " e substituir o valor de $ {CONTAINER_IP} em $ JVM_OPTS para 10.44.214.63. Finalmente, defina esse valor avaliado novamente na variável JVM_OPTS.

Saída de amostra:

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

Minha análise até agora: Eu escrevi o código abaixo para fazer a tarefa

#!/bin/bash

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

printenv daria todo o env. variável junto com valores. Eu só preciso do nome e depois uso o valor.

Como conseguir isso?

    
por Bandi Kishore 06.04.2016 / 13:03

2 respostas

0

O seguinte funcionou para mim.

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

Como postado no link

    
por 06.04.2016 / 14:17
1

Basicamente, a solução está na sua pergunta: eval.

eval export JVM_OPTS=\"$JVM_OPTS\"
    
por 06.04.2016 / 13:20