測試環境為 Ubuntu 16.04 x64
用下面的 script 來觀察 source script, sh script, ./script 執行後各項變數是否保留.
root@ubuntu:~# cat bash.sh #!/bin/bash read -p "Please input your name:" name echo -e "Your name is ${name}" root@ubuntu:~# chmod a+x bash.sh
sh script 與 ./script
我開了兩個 SSH 連線,一個用來執行程式,一個用來觀察程序的變化.
一開始先檢查程序的狀況.
root@ubuntu:~# pstree ├─sshd─┬─2*[sshd───sshd───bash───sudo───su───bash] │ └─sshd───sshd───bash───sudo───su───bash───pstree
root@ubuntu:~# ./bash.sh Please input your name:Ben Your name is Ben root@ubuntu:~# echo ${name}
在剛剛的 script 還未輸入使用者名稱前就執行 pstress 來觀察程序的變化.可以看到 ./script 是一個新的子程序,並不會把參數 name 回傳給父程序.
root@ubuntu:~# pstree ├─sshd─┬─sshd───sshd───bash───sudo───su───bash │ ├─sshd───sshd───bash───sudo───su───bash───pstree │ └─sshd───sshd───bash───sudo───su───bash───bash.sh
sh script 與 ./script 一樣當子程序完成後,在子程序內設定的變數都會在 scipt 一同結束,而不會傳回到父程序.
root@ubuntu:~# sh bash.sh Please input your name:Ben -e Your name is Ben root@ubuntu:~# echo ${name}
root@ubuntu:~# pstree ├─sshd─┬─sshd───sshd───bash───sudo───su───bash │ ├─sshd───sshd───bash───sudo───su───bash───pstree │ └─sshd───sshd───bash───sudo───su───bash───sh
source script
使用 source 來執行 script.
root@ubuntu:~# source bash.sh Please input your name:Ben Your name is Ben root@ubuntu:~# echo ${name} Ben
可以看到系統並沒有產生新程序,所以執行後的 參數被保留下來了.
root@ubuntu:~# pstree ├─sshd─┬─2*[sshd───sshd───bash───sudo───su───bash] │ └─sshd───sshd───bash───sudo───su───bash───pstree
沒有解決問題,試試搜尋本站其他內容