shell脚本归结起来有三种执行方式,按执行时是否创建子shell可以分为两类。下面贴出我的测试脚本及测试结果。
-
#! /bin/bash
-
cd
-
echo "this shell's pid is $$" #打印执行脚本进程的pid
-
-
#执行shell脚本方式可以分为两类:
-
#a. 创建一个子shell, 即一个新的进程,然后在里面执行脚本。
-
# ./shell.sh
-
# shell-absolute-path/shell.sh #这两种方式,要求执行用户有执行权限。
-
# bash shell.sh
-
# sh shell.sh #这两种方式可以在用户对shell.sh没有执行权限时执行。
-
#b. 不创建子shell,直接在当前shell中执行脚本:
-
# . shell.sh #前面是点号。
-
# source shell.sh #这两种方式,是否让你想起了什么,对,当我们修改了.bashrc,要让他马上生效时,采用的就是这种执行方式。
-
# 分别用以上方式执行该脚本,你会发现区别的
实验结果:


可以看到采用.和source执行脚本shell的pid和当前环境shell的pid一样,不会创建子shell,而且脚本中的cd命令如同实在当前shell中执行的一样,可以改变当前shell的上下文环境。
而除此外的其它执行方式就没有以上特点了,从他们执行时shel的pid和当前shell是不一样的,因此cd命令的效果没有看到,因为它只是改变了执行它的那个子shell的上下文环境,对当前shell无影响。