shell指令碼的幾種不同執行方式的區別實驗
阿新 • • 發佈:2019-02-03
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無影響。