What is a Subshell?
Revision as of 21:25, 22 September 2009 by Admin (talk | contribs) (→Exporting Functions and Variables)
- 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. For example,
exec command
# redirect the shells stderr to null
exec 2>/dev/null