您好,登錄后才能下訂單哦!
前言
不同的script執行方式會造成不一樣的結果,尤其對bash的環境影響很大,腳本的執行方式有大概以下幾種方式。
首先寫一個簡單的test.sh文件:
#!/bin/bash read -p "Please input your first name:" firstname read -p "Please input your last name:" lastname echo -e "\nYour full name is: $firstname $lastname"
使用sh test.sh執行
使用 sh test.sh 來執行script文件,該方法標明使用 sh 這種shell來執行test.sh文件,sh已經是一種被bash替代的shell,盡管我們在test.sh中聲明使用 #!/bin/bash 來執行我們的文件,但此時使用sh而不是bash,則#!/bin/bash 已不起作用。
使用bash test.sh 執行
該方法其實與 sh test.sh 的原理一樣,只是使用了 /bin/bash 該種shell來執行我們的腳本文件。
所以,其實使用 dash test.sh' 也是可以的,只是取決于自己想使用那種shell來執行腳本,但sh、bash、dash三者有些許差別,對于部分關鍵字如 let,bash支持,而sh和dash并不支持,對于部分關鍵字則選擇使用bash。
使用點 . 執行
該種方式使用之前必須為文件添加執行的權限:
$ chmod +x test.sh
添加完執行權限之后,便可以使用 ./test.sh 來執行腳本,該方式與 bash test.sh 是一樣的 ,默認使用 bin/bash 來執行我們的腳本。
只有該種執行方式需要對文件添加執行權限,其他方式并不需要。
使用source執行
使用source則也能夠直接執行我們的腳本:
source test.sh
區別
當我們使用 sh test.sh 、bash test.sh 、 ./test.sh 執行腳本的時候,該test.sh運行腳本都會使用一個新的shell環境來執行腳本內的命令,也就是說,使用這3種方式時,其實script是在子進程的shell內執行,當子進程完成后,子進程內的各項變量和操作將會結束而不會傳回到父進程中。
無法理解??看下面例子:
[root@ubuntu] # bash test.sh Please input your first name: yao <==輸入firstname Please input your last name: pentonBin <==輸入lastname Your full name is: yao pentonBin [root@ubuntu] # echo $firstname <==這里沒有輸出
如果使用source方法來執行腳本呢?
[root@ubuntu] # source test.sh Please input your first name: yao <==輸入firstname Please input your last name: pentonBin <==輸入lastname Your full name is: yao pentonBin [root@ubuntu] # echo $firstname yao <==這里輸出firstname
也就是說,source方法執行腳本是在父進程中執行的,test.sh的各項操作都會在原本的shell內生效,這也是為什么不注銷系統而要讓某些寫入~/.bashrc的設置生效時,需要使用 source ~/.bashrc 而不能使用 bash ~/.bashrc
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。