共计 1518 个字符,预计需要花费 4 分钟才能阅读完成。
1、回顾
我们昨天给大家分享了四种执行脚本的方法,不知道大家还记不记得了,分别是使用 bash file.sh、./file.sh、source file.sh、. file.sh。我们建议大家使用前两种方法来执行脚本,这也是日常工作中大家都使用的方式。
那今天我们先来说说这四种执行脚本的区别是什么
2、区别
首先我们打印当前进程的父进程 ID 和当前进程的 ID,分别使用命令
打印父进程 ID:echo $PPID
打印当前进程 ID:echo $$
现在我们把它写入脚本里面,如下所示
[root@localhost ~]# cat test.sh
#!/bin/bash
echo ” PPID: $PPID ,PID: $$”
在执行之前,我们先来确定一下当前我们 shell 环境的 PID 号
[root@localhost ~]# tty
/dev/pts/2
[root@localhost ~]# ps axjf | grep pts/2
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1016 6281 6281 6281 ? -1 Ss 0 0:00 \_ sshd: root@pts/2
6281 6283 6283 6283 pts/2 7053 Ss 0 0:00 \_ -bash
6283 7053 7053 6283 pts/2 7053 R+ 0 0:00 \_ ps axjf
6283 7054 7053 6283 pts/2 7053 S+ 0 0:00 \_ grep –color=pts/2
可以看出来我们当前 shell 进程的 PID 号(-bash)是 6283 这个数字,那现在我们来执行一下看看。
2.1、使用 bash 命令直接执行
[root@localhost ~]# bash test.sh
PPID: 6283 ,PID: 7088
可以看出来当前的 shell 环境又生成了一个新的子 shell 环境,其子进程 ID:7088,此时我们 $$ 正好打印的是这个子进程的 ID 号
2.2、使用./ 命令执行(先赋予 x 权限)
[root@localhost ~]# ./test.sh
PPID: 6283 ,PID: 7115
可以看出来当前的 shell 环境也是又生成了一个新的子 shell 环境,其子进程 ID:7115,进程 ID 号是随机的,因此跟上面的不一样。
2.3、使用 source 命令来执行
[root@localhost ~]# source test.sh
PPID: 6281 ,PID: 6283
我们发现这次的 PID 号居然是 6283,也就是我们上面给大家展示的当前 shell 环境的 PID,而 6281 是其父进程 ID 号。这说明我们使用 source 命令执行脚本后 并没有 生成一个新的子 shell 环境。还是在原来的 bash shell 环境中执行的 shell 脚本。
2.4、使用 . 来执行
[root@localhost ~]# . test.sh
PPID: 6281 ,PID: 6283
依然是与上面的 soure 命令的情况是一样的,使用 . 来执行脚本,并没有生成新的子 shell 环境,还是在原来的 bash shell 环境中执行的。
好了,上面的就是我们给大家分享的研究成果,希望大家今后在执行 shell 脚本时要知道自己是在做什么。不然回因为执行的 shell 环境问题而大费周折。
声明:文章来源于网络,如有侵权请联系删除!