1. 程式人生 > >shell指令碼的幾種不同執行方式的區別實驗

shell指令碼的幾種不同執行方式的區別實驗

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無影響。