variável exportada não persistiu após a execução do script

4

Estou enfrentando um problema estranho. Eu tenho um VM com Solaris 11, e tentando escrever alguns scripts bash.

se, no shell, eu digitar:

export TEST=aaa

e, em seguida, executar:

set

Eu vejo corretamente uma nova variável de ambiente chamada TEST cujo valor é aaa. Se, no entanto, eu faço basicamente a mesma coisa em um script. Quando o script termina, não vejo a variável definida. Para fazer um exemplo concreto, se em um arquivo test.sh eu tenho:

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
echo 2: $USER
TEST=sss
echo 3:  $TEST
export TEST
echo 4:  $TEST

imprime:

1:
2: daniele
3: sss
4: sss

e após sua execução, o TEST não é definido no shell. Estou esquecendo de algo? Eu tentei exportar TEST = sss e a variável separada set / export sem diferença.

    
por Daniele 30.11.2011 / 17:18

2 respostas

10

export - disponibiliza variáveis para processos filhos, mas não para pais.

source - execute o script no shell sem criar um processo filho

Para o exalmpe, a variável persistente pode ser realizada gravando no arquivo

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
CONFIGFILE=~/test-persistent.vars
if [ -r ${CONFIGFILE} ]; then
  # Read the configfile if it's existing and readable
  source ${CONFIGFILE}
fi
echo 2: $TEST
echo 3: $USER
TEST=sss
echo 4:  $TEST
echo TEST="$TEST"> ${CONFIGFILE}
echo 5:  $TEST
    
por 30.11.2011 / 18:16
5

Para tornar suas variáveis visíveis, você precisa source do script que exporta suas variáveis. Veja man source .

    
por 30.11.2011 / 17:22

Tags