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


8

Estou enfrentando um problema estranho. Eu tenho uma vm com solaris 11, e tentando escrever alguns scripts bash.

se, no shell, eu digitar:

export TEST=aaa

e, posteriormente, execute:

set

Vejo corretamente uma nova variável de ambiente chamada TEST cujo valor é aaa. Se, no entanto, faço basicamente a mesma coisa em um script. quando o script termina, não vejo o conjunto de variáveis. Para dar 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, TEST não é definido no shell. Estou esquecendo de algo? Tentei tanto exportar TEST = sss quanto a variável separada set / export sem diferença.

Respostas:


15

exportar - torne a variável disponível para processos filho, mas não para pai.

source - executa o script no shell sem criar processo filho

Para exalmpe, a variável persistente pode ser realizada escrevendo 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

Isso também não é exatamente o que eu queria alcançar, mas entendi seu ponto de vista. obrigado.
Daniele

5

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


1
provavelmente não há uma página de manual de origem e você deseja o help sourcebash.
ensopado de

isso funciona se eu invocar diretamente o script (ou seja, se eu originar o script com a exportação do shell), mas não parece funcionar se eu originar o script de outro script.
Daniele
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.