variable exportée non persistée après l'exécution du script


8

Je suis confronté à un problème étrange. J'ai un vm avec solaris 11 et j'essaye d'écrire des scripts bash.

si, sur le shell, je tape:

export TEST=aaa

et exécuter ensuite:

set

Je vois correctement une nouvelle variable d'environnement nommée TEST dont la valeur est aaa. Si, cependant, je fais essentiellement la même chose dans un script. lorsque le script se termine, je ne vois pas l'ensemble de variables. Pour faire un exemple concret, si dans un fichier test.sh j'ai:

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

il imprime:

1:
2: daniele
3: sss
4: sss

et après son exécution, TEST n'est pas défini dans le shell. Suis-je en train de manquer quelque chose? J'ai essayé à la fois d'exporter TEST = sss et de définir / exporter la variable séparée sans différence.

Réponses:


15

export - rend la variable disponible pour les processus enfants, mais pas pour le parent.

source - exécuter le script dans le shell sans créer de processus enfant

Pour exalmpe, une variable persistante peut être réalisée en écrivant dans un fichier

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

Ce n'est pas non plus exactement ce que je voulais réaliser, mais j'ai compris votre point de vue. Merci.
Daniele

5

Pour rendre vos variables visibles, vous avez besoin sourcedu script qui exporte vos variables. Tu vois man source.


1
il n'y a probablement pas de page de manuel source, et vous voulez help sourceplutôt utiliser bash.
ragoût

cela fonctionne si j'invoque directement le script (c'est-à-dire si je source le script avec l'export depuis le shell), mais cela ne semble pas fonctionner si je source le script à partir d'un autre script.
Daniele
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.