The shell script’s environment
When running a script with
#!/bin/bash, a new invocation of
bash with its own environment is started to
execute the script’s command as the parent shell waits. Exported
variables in the parent shell are copied into the child’s
environment and are available to the child. Because configuration
files will be run, additional shell variables may be set and
environment variables may be overwritten. If you are depending upon
a variable in your shell script, be sure that it is either set by
the shell configuration files or exported into the environment for
your use, but not both.
Another important concept regarding your shell’s environment is known as unidirectional or one-way inheritance. Although your current shell’s environment is passed into a shell script, that environment is not passed back to the original shell when your program terminates. This means that changes made to variables during the execution of your script are not preserved when the script exits. Instead, the values in the parent shell’s variables are the same as they were before the script executed. This is a basic Unix construct; inheritance goes from parent process to child process, and not the other way around.