1. 程式人生 > >[Shell]shell中./和source的區別(…

[Shell]shell中./和source的區別(…

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]:~$