Obter o valor mais recente de uma variável de ambiente é um script de shell bash

0

Gostaria de saber como podemos obter o valor mais recente de uma variável de ambiente em um script de shell bash. Problema que estou tendo é, eu tenho uma variável de ambiente que pode ser alterada externamente várias vezes. Mas quando eu uso essa variável em um script de shell, ele sempre exibe o valor que foi o valor durante o início. por exemplo eu escrevi um script de shell existe uma variável env x é 10

echo $x   #Here this prints 10
sleep 20  #here during the sleep I am changing the value to 5
echo $x   #Here even after value is changed to 5 , it prints 10.

A execução real está abaixo:

# ./temp.sh &
[1] 915
# 10

# export x=5
# 10

[1]+  Done                    ./temp.sh
#
    
por Vijay 14.04.2016 / 08:04

2 respostas

2

Uma variável de ambiente não serve para fazer esse truque. O script herda o ambiente como uma cópia, uma vez que é executado; os dois ambientes são então independentes.

Você pode precisar procurar métodos de comunicação entre processos. Se você realmente precisa fazer isso via variável, marque isso ; embora não seja o caminho certo para se comunicar com um processo em execução no uso normal.

    
por 14.04.2016 / 08:55
1

As variáveis de ambiente são específicas para cada processo. Quando um processo é iniciado, ele recebe uma cópia do ambiente (criado pelo processo que o inicia) e, uma vez iniciado, nenhum outro processo pode tocar nessa cópia.

No seu exemplo, quando você altera o valor de x , você está fazendo isso no shell que está executando. Ao exportar variáveis, você diz ao shell que deseja que elas sejam copiadas para o ambiente de processos que o shell inicia subseqüentemente, mas isso não pode afetar os valores das variáveis nos processos que já foram iniciados. Portanto, temp.sh , que tem seu próprio shell em execução, obtém o valor de x no momento em que inicia, mas as alterações subsequentes feitas no x no shell interativo que você está usando não são visíveis para o shell em execução temp.sh .

(Estritamente falando root poderia alterar o ambiente de um processo em execução, mas isso está além do escopo desta resposta.)

    
por 14.04.2016 / 08:55