la variable exportada no persiste después de la ejecución del script

8

Estoy enfrentando un problema extraño. Tengo una máquina virtual con Solaris 11 e intento escribir algunos scripts de bash.

si, en el shell, escribo:

export TEST=aaa

y posteriormente ejecuta:

set

Veo correctamente una nueva variable de entorno llamada TEST cuyo valor es aaa. Sin embargo, si hago básicamente lo mismo en un script. cuando termina el script, no veo el conjunto de variables. Para hacer un ejemplo concreto, si en un archivo test.sh tengo:

#!/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

y después de su ejecución, TEST no se establece en el shell. ¿Me estoy perdiendo de algo? Intenté exportar TEST = sss y la variable set / export por separado sin diferencia.

Daniele
fuente

Respuestas:

15

export - hace que la variable esté disponible para los procesos secundarios, pero no para los padres.

fuente: ejecutar script en shell sin crear proceso hijo

Para exalmpe, la variable persistente se puede realizar escribiendo en el archivo

#!/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
mmv-ru
fuente
Esto tampoco es exactamente lo que quería lograr, pero entendí tu punto. Gracias.
Daniele
5

Para que sus variables sean visibles, necesita sourceel script que exporta sus variables. Ver man source.

Khaled
fuente
1
es probable que no haya una página de manual de origen, y help sourceen su lugar desea bash.
estofado
esto funciona si invoco directamente el script (es decir, si obtengo el script con la exportación desde el shell), pero no parece funcionar si obtengo el script desde otro script.
Daniele