点命令(.)和子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。 这就是点命令的应用。

什么是子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 onitroad.com
Subshell 子shell
日期:2019-04-16 23:59:05 来源:oir作者:oir