Linux的子shell

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

这次运行,其最后输出目录与最初输出的目录是一样的。

猜你喜欢

转载自blog.csdn.net/bigwood99/article/details/128023333