< FrankJS />

‘source’ vs ‘sh’ | The Difference Between Sourcing and Running a Script

While effectively the results may often be the same, it is important to realize the inherent differences between these two methods of execution.

You can source any runnable shell script. The command source executes a script as a list of commands within the context of the current process. The end effect will be as if you had typed the commands from the script into the terminal yourself. This means that environment variables set by the script remain available after it’s finished running. For example, if the script changes directories, when it finishes running, your current working directory will have changed.

This is in contrast to running a script with sh, in which case the environment variables set within the newly-spawned process will be lost once the script exits.

Further Reading:

  • sh man page

  • 2.) excerpt on ‘source’, from bash man page:

source filename [arguments]Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename. If filename does not contain a slash, file names in PATH are used to find the directory containing filename. The file searched for in PATH need not be executable. When bash is not in posix mode, the current directory is searched if no file is found in PATH. If the sourcepath option to the shopt builtin command is turned off, the PATH is not searched. If any arguments are supplied, they become the positional parameters whenfilename is executed. Otherwise the positional parameters are unchanged. The return status is the status of the last command exited within the script (0 if no commands are executed), and false if filename is not found or cannot be read.

Frank J Santaguida, 2022