1. 程式人生 > 其它 >【Linux/shell】使用bash/sh file.sh、./file.sh 、source file.sh、. file.sh的區別(20210109)

【Linux/shell】使用bash/sh file.sh、./file.sh 、source file.sh、. file.sh的區別(20210109)

技術標籤:Linuxbash

#參考文章:
https://blog.csdn.net/cju_277/article/details/112016245

首先列印當前程序的父程序ID和當前程序的ID,分別使用如下命令:

列印父程序ID: echo $PPID
列印當前程序ID: echo $$

現在把它寫入腳本里面,如下所示:

[[email protected] ~]#cat test.sh 
#!/bin/bash
echo " PPID: $PPID ,PID: $$"

在執行之前,先來確定一下當前shell環境的PID號:

[[email protected]
~]#tty /dev/pts/0 [[email protected] ~]#ps axjf|head -1;ps axjf | grep pts/0 PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 26780 22636 22636 22636 ? -1 Ss 0 0:00 \_ sshd: [email protected]/0 22636 22639 22639 22639 pts/0 22894 Ss 0 0:00 \_ -bash 22639 22894 22894 22639 pts/0 22894 R+ 0 0:00 \_ ps
axjf 22639 22895 22894 22639 pts/0 22894 S+ 0 0:00 \_ grep --color=auto pts/0 [[email protected] ~]#

可以看出來當前shell程序的PID號(-bash)是22639這個數字,現在來執行一下看看。

1.使用bash/sh命令執行

在這裡插入圖片描述
可以看出來當前的shell環境又生成了一個新的子shell環境,其子程序ID:22926,此時 $$ 正好列印的是這個子程序的ID號。

2.使用./命令執行(先賦予x許可權)

在這裡插入圖片描述
可以看出來當前的shell環境也是又生成了一個新的子shell環境,其子程序ID:22988,程序ID號是隨機的,因此跟上面的不一樣。

3.使用source命令來執行

在這裡插入圖片描述
可以發現這次的PID號是22639,也就是當前shell環境的PID,而22636是其父程序ID號。這說明使用source命令執行指令碼後並沒有生成一個新的子shell環境。還是在原來的bash shell環境中執行的shell指令碼。

4.使用.命令來執行

在這裡插入圖片描述
依然是與上面的soure命令的情況是一樣的,使用 . 來執行指令碼,並沒有生成新的子shell環境,還是在原來的bash shell環境中執行的。

總結

總結:
(1)bash/sh 與 路徑,後面跟上sh指令碼的話,當前的shell環境會生成了一個新的子shell環境來執行shell指令碼的;
bash/sh file.sh
./file.sh

(2)source 和 .是等價的,後面跟上sh指令碼的話,並不會生成一個新的子shell環境,還是在原來的bash shell環境中執行的shell指令碼。
source file.sh、
. file.sh