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