linux运行一个shell脚本,其本身能启动它自己的子进程。
一般来说,脚本里的一个外部命令能生成出一个紫禁城,而Bash内建命令却不这样。
将一组命令放在圆括号里执行,形成一个命令列表连续执行。在圆括号里的命令会在一个子shell里运行。
子shell里的变量不能被这段代码外面的代码块访问。可以理解为局部变量。
看一个例子:
#!/bin/bash
mainshell="I am in main shell!"
echo "mainshell says:"$mainshell
(mainshell="I am in subshell!";echo "subshell says:"$mainshell)
echo "mainshell says again:"$mainshell
子shell中目录更改不会影响到父shell。
下面看一个例子:
#!/bin/bash
FILE=.bashrc
#
pwd
echo "********"
for home in `awk -F: '{print $6}' /etc/passwd`
do
[ -d "$home" ] || continue
[ -r "$home" ] || continue
cd $home; pwd
done
echo "********"
pwd
exit 0

这段代码没有启动子shell,其最后输出目录与最初输出的目录是不一样的。
稍微修改一下代码,使用圆括号启动子shell
#!/bin/bash
FILE=.bashrc
#
pwd
echo "********"
for home in `awk -F: '{print $6}' /etc/passwd`
do
[ -d "$home" ] || continue
[ -r "$home" ] || continue
( cd $home; pwd )
done
echo "********"
pwd
这次运行,其最后输出目录与最初输出的目录是一样的。