shell脚本子shell的妙用
目录结构
├── a
├── b
├── c
├── d
└── test.sh
现有这样一段脚本(此处代码加上行号是为了方便说明)
1 #!/bin/bash
2
3 set -e
4
5 pwd=`pwd`
6
7 for file in `ls $pwd`
8 do
9 if [ -d $file ]
10 then
11 cd $pwd/$file
12 echo $file
13 fi
14 done
执行该脚本后,得出的结果是
a
这里很有意思的地方是,for循环仅仅执行了一次就退出了
内建的cd 命令切换了目录以后 居然会导致当前的循环中断
为了避免这种情况的发生,我们可以借鉴一下子shell的概念 把cd 命令当成子shell作为独立的进程来运行 这样就不会对当前的脚本产生影响了
# 子shell的格式是用括号把一系列的命令包裹起来
(
command1
command2
command3
)
因此经过一番修改,我得到了下面的脚本(在11和14行代码处加上了括号)
1 #!/bin/bash
2
3 set -e
4
5 pwd=`pwd`
6
7 for file in `ls $pwd`
8 do
9 if [ -d $file ]
10 then
11 (
12 cd $pwd/$file
13 echo $file
14 )
15 fi
16 done
这样就能得出正常的结果了
a
b
c
d