export not working in my shell script

LinuxShellVariablesTerminal

Linux Problem Overview


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. Can somebody please help. Thanks in advance.

Linux Solutions


Solution 1 - Linux

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."

Solution 2 - Linux

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionXanderView Question on Stackoverflow
Solution 1 - LinuxlinuxeasyView Answer on Stackoverflow
Solution 2 - LinuxFred FooView Answer on Stackoverflow