shell入门第四讲

2020-04-21 10:11:06 浏览数 (1)

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环境问题而大费周折。

0 人点赞