export not working in my shell script
If you are executing your files like sh 1.sh
or ./1.sh
Then you are executing it in a sub-shell.
If you want the changes to be made in your current shell, you could do:
. 1.sh
# OR
source 1.sh
Please consider going through the reference-documentation.
"When a script is run using source
[or .
] it runs within the existing shell, any variables created or modified by the script will remain available after the script completes. In contrast if the script is run just as filename
, then a separate subshell (with a completely separate set of variables) would be spawned to run the script."
export
puts a variable in the executing shell's environment so it is passed to processes executed by the script, but not to the process calling the script or any other processes. Try executing
#!/bin/sh
FOO=bar
env | grep '^FOO='
and
#!/bin/sh
FOO=bar
export FOO
env | grep '^FOO='
to see the effect of export
.
To get the variable from 1.sh
to 2.sh
, either call 2.sh
from 1.sh
, or import 1.sh
in 2.sh
:
#!/bin/sh
. ./1.sh
echo $variable