Reputation: 1725
I have two scripts 1.sh and 2.sh.
1.sh is as follows:
#!/bin/sh
variable="thisisit"
export variable
2.sh is as follows:
#!/bin/sh
echo $variable
According to what I read, doing like this (export) can access the variables in one shell script from another. But this is not working in my scripts.
Upvotes: 102
Views: 112114
Reputation: 6499
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."
Upvotes: 227
Reputation: 363817
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
Upvotes: 14