[Shell]shell中./和source的區別(…
阿新 • • 發佈:2018-12-31
lu1() {
echo 'aaaaaaaaa'
}
lu2() {
echo 'bbbbbbbbb'
}
上面就是,run.sh的原始碼了,可以看到只有2個函式定義沒有任何地方來呼叫這兩個函式,那麼我們如果這樣執行:
[email protected]:~$ ./run.sh
[email protected]:~$
可以看到什麼都沒有,因為沒有地方呼叫這2個函式,我們希望在我們的[email protected]:~$
提示符後面呼叫這2個函式,來試試,
[email protected]:~$ lu1
bash: lu1: command not found
[email protected]:~$ lu2
bash: lu2: command not found
[email protected]:~$
結果都提示找不到命令,是不是我們的這個需求shell還不提供支援呢,當然不是,這樣有用的需求shell早就為我們做好解決方案了,來看看怎麼實現,
shell中有2個命令可以完成我們的工作,一個是source另一個就是和source等效的.逗號運算子:
[email protected]:~$ . run.sh或者[email protected]:~$source
run.sh
這樣我們run.sh指令碼中建立的變數和函式就新增到了執行.或source的shell,直到關閉該shell視窗,否則run.sh中建立的變數和函式將一直有效,
如果我們只是執行./run.sh啟動一個subshell來執行我們的run.sh指令碼,那麼run.sh指令碼中的變數和函式將緊緊影響到由shell啟動的subshell,當./run.sh指令碼退出之後,run.sh變數和函式的影響壽命也到了盡頭。
來看看現在的現象:
[email protected] :~$ ./run.sh
[email protected]:~$ lu1
bash: lu1: command not found
[email protected]:~$ lu2
bash: lu2: command not found
[email protected]:~$ . run.sh
[email protected]:~$ lu1
aaaaaaaaa
[email protected]:~$ lu2
bbbbbbbbb
[email protected]:~$
重新啟動一個新shell:
[email protected] :~$ ./run.sh
[email protected]:~$ lu1
bash: lu1: command not found
[email protected]:~$ lu2
bash: lu2: command not found
[email protected]:~$ source run.sh
[email protected]:~$ lu1
aaaaaaaaa
[email protected]:~$ lu2
bbbbbbbbb
[email protected]:~$