exported variable not persisted after script execution
I'm facing a wierd issue. I've a vm with solaris 11, and trying to write some bash scripts.
if, on the shell, I type :
export TEST=aaa
and subsequently run:
set
I correctly see a new environment variable named TEST whose value is aaa. If, however I do basically the same thing in a script. when the script terminates, I do not see the variable set. To make a concrete example, if in a file test.sh I have:
#!/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
it prints:
1:
2: daniele
3: sss
4: sss
and after its execution, TEST is not set in the shell. Am I missing something? I tried both to do export TEST=sss and the separate variable set/export with no difference.
export - make variable available for child processes, but not for parent.
source - run script in shell without creating child process
For exalmpe, persistent variable can be realised by writing to file
#!/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
To make your variables visible, you need to source
the script which exports your variables. See man source
.