Difference between revisions of "What is a Subshell?"

From Linux Shell Scripting Tutorial - A Beginner's handbook
Jump to navigation Jump to search
Line 15: Line 15:
 
* However, environment variables (such as $HOME, $MAIL etc) are passed to subshell.  
 
* However, environment variables (such as $HOME, $MAIL etc) are passed to subshell.  
 
==Use exec command to avoid subshell==
 
==Use exec command to avoid subshell==
You can use the [[exec command]] to avoid subshell. The exec command replaces this shell with the specified program. For example,
+
You can use the [[exec command]] to avoid subshell. The exec command replaces this shell with the specified program without swapping a new subshell or proces. For example,
 
<source lang="bash">exec command
 
<source lang="bash">exec command
 
# redirect the shells stderr to null
 
# redirect the shells stderr to null

Revision as of 21:27, 22 September 2009

  • Whenever you run a shell script, it creates a new process called subshell.
  • A Subshell can be used to do parallel processing.
  • If you start another shell on top of your current shell, it can be referred to as a subshell. Type the following command to see subshell value:
echo $BASH_SUBSHELL

OR

echo "Current shell: $BASH_SUBSHELL"; ( echo "Running du in subshell: $BASH_SUBSHELL" ;cd /tmp; du 2>/tmp/error 1>/tmp/output)

Exporting Functions and Variables

A subshell does not inherit a variable's setting. Use the export command to export variables and functions to subshell:

WWWJAIL=/apache.jail
export WWWJAIL
die() { echo "$@"; exit 2; } 
export -f die
# now call script that will access die() and $WWWJAIL
/etc/nixcraft/setupjail -d cyberciti.com
  • However, environment variables (such as $HOME, $MAIL etc) are passed to subshell.

Use exec command to avoid subshell

You can use the exec command to avoid subshell. The exec command replaces this shell with the specified program without swapping a new subshell or proces. For example,

exec command
# redirect the shells stderr to null
exec 2>/dev/null