shell入門第四講
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環境問題而大費周折。
聲明:文章來源于網絡,如有侵權請聯系刪除!