執行 bash sh 有這幾種方式, source script, .script , sh script, ./script ,雖然都是執行但是卻有不一樣的效果
為了觀察這幾種不同的行為先寫個 script 來看看.
# vi ben.sh
#!/bin/bash echo -n "Press [Enter] key to continue..." read
#chmod a+x ben.sh
Script 很簡單,就是等待使用者輸入資料,我們主要的目的就是希望程式可以暫停住,不需要觀察時按 任一鍵就可以回去原來的 Shall.
-
source script, . script
執行
# source ben.sh Press [Enter] key to continue...
或
# . ben.sh Press [Enter] key to continue...
觀察,須要另外一個 console 來觀察,我用兩個 SSH 來連線觀察.
#pstree |-sshd-+-sshd---bash | `-sshd---bash---pstree
可以看到 ben.sh 主要還是運行在父行程,並沒有新創建子行程出來,這樣的執行出來的 變數結果 可以被存儲下來.不會因為執行完成後記憶體管理程式就把所有的變數結果回收回去.
-
./script , sh script
#./ben.sh Press [Enter] key to continue...
觀察,須要另外一個 console 來觀察,我用兩個 SSH 來連線觀察.
#pstree |-sshd-+-sshd---bash---ben.sh | `-sshd---bash---pstree
可以看到一個新的子行程 ben.sh 被執行出來.
# sh ben.sh Press [Enter] key to continue...
觀察,須要另外一個 console 來觀察,我用兩個 SSH 來連線觀察.
#pstree |-sshd-+-sshd---bash---sh | `-sshd---bash---pstree
可以看到一個新的子行程 sh 被執行出來.
可以看出這兩種執行結果所採用的方式大不同,不可不小心.
沒有解決問題,試試搜尋本站其他內容