Subshell 子shell
时间:2019-04-16 23:59:05 来源:igfitidea点击:
什么是子shell
当你运行一个shell脚本时,它都会创建一个名为subshell的新进程,您的脚本将使用subshell执行。
子shell可以用于进行并行处理。
如果您在当前shell的顶部启动另一个shell,它可以被称为子shell。
查看子shell的值
echo $BASH_SUBSHELL
或者
echo "当前shell: $BASH_SUBSHELL"; ( echo "在子shell中运行du命令: $BASH_SUBSHELL" ;cd /tmp; du 2>/tmp/error 1>/tmp/output)
在括号内的任何命令都在子shell中运行。
导出函数和变量到子shell中。
子shell不继承变量的设置(除了环境变量,比如$HOME、$MAIL等)。可以使用export命令将变量和函数导出到subshell:
WWWJAIL=/apache.jail export WWWJAIL die() { echo "$@"; exit 2; } export -f die # 现在调用脚本将可以访问die()函数和$WWWJAIL变量 /etc/nixcraft/setupjail -d theitroad.com
点命令(.
)和子shell
Linux中脚本前面有个点是什么意思
点命令用于像下面这样运行shell脚本:
. script.sh
它可以修改当前的shell变量。
例如,创建一个shell脚本/tmp/dottest.sh,如下所示:
#!/bin/bash echo "In script before : $WWWROOT" WWWROOT=/var/www/html echo "In script after : $WWWROOT"
然后在shell提示符中定义一个WWWROOT变量
WWWROOT=/foobar echo $WWWROOT
输出是: /foobar
运行脚本和命令:
/tmp/dottest.sh echo $WWWJAIL
输出还是: /foobar,这是因为shell脚本是在一个子shell
中执行的。
现在运行点命令:
. /tmp/dottest.sh echo $WWWJAIL
输出变成了 /var/www/html
。 这就是点命令的应用。