淺析shell中source命令和.逗號命令對當前父shell的影響

來源:互聯網
上載者:User

 

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.