淺談ubuntu執(zhí)行.sh文件幾種方式區(qū)別
前言
不同的script執(zhí)行方式會(huì)造成不一樣的結(jié)果,尤其對(duì)bash的環(huán)境影響很大,腳本的執(zhí)行方式有大概以下幾種方式。
首先寫(xiě)一個(gè)簡(jiǎn)單的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執(zhí)行
使用 sh test.sh 來(lái)執(zhí)行script文件,該方法標(biāo)明使用 sh 這種shell來(lái)執(zhí)行test.sh文件,sh已經(jīng)是一種被bash替代的shell,盡管我們?cè)趖est.sh中聲明使用 #!/bin/bash 來(lái)執(zhí)行我們的文件,但此時(shí)使用sh而不是bash,則#!/bin/bash 已不起作用。
使用bash test.sh 執(zhí)行
該方法其實(shí)與 sh test.sh 的原理一樣,只是使用了 /bin/bash 該種shell來(lái)執(zhí)行我們的腳本文件。
所以,其實(shí)使用 dash test.sh' 也是可以的,只是取決于自己想使用那種shell來(lái)執(zhí)行腳本,但sh、bash、dash三者有些許差別,對(duì)于部分關(guān)鍵字如 let,bash支持,而sh和dash并不支持,對(duì)于部分關(guān)鍵字則選擇使用bash。
使用點(diǎn) . 執(zhí)行
該種方式使用之前必須為文件添加執(zhí)行的權(quán)限:
$ chmod +x test.sh
添加完執(zhí)行權(quán)限之后,便可以使用 ./test.sh 來(lái)執(zhí)行腳本,該方式與 bash test.sh 是一樣的 ,默認(rèn)使用 bin/bash 來(lái)執(zhí)行我們的腳本。
只有該種執(zhí)行方式需要對(duì)文件添加執(zhí)行權(quán)限,其他方式并不需要。
使用source執(zhí)行
使用source則也能夠直接執(zhí)行我們的腳本:
source test.sh
區(qū)別
當(dāng)我們使用 sh test.sh 、bash test.sh 、 ./test.sh 執(zhí)行腳本的時(shí)候,該test.sh運(yùn)行腳本都會(huì)使用一個(gè)新的shell環(huán)境來(lái)執(zhí)行腳本內(nèi)的命令,也就是說(shuō),使用這3種方式時(shí),其實(shí)script是在子進(jìn)程的shell內(nèi)執(zhí)行,當(dāng)子進(jìn)程完成后,子進(jìn)程內(nèi)的各項(xiàng)變量和操作將會(huì)結(jié)束而不會(huì)傳回到父進(jìn)程中。
無(wú)法理解??看下面例子:
[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 <==這里沒(méi)有輸出
如果使用source方法來(lái)執(zhí)行腳本呢?
[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
也就是說(shuō),source方法執(zhí)行腳本是在父進(jìn)程中執(zhí)行的,test.sh的各項(xiàng)操作都會(huì)在原本的shell內(nèi)生效,這也是為什么不注銷(xiāo)系統(tǒng)而要讓某些寫(xiě)入~/.bashrc的設(shè)置生效時(shí),需要使用 source ~/.bashrc 而不能使用 bash ~/.bashrc
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Typecho程序偽靜態(tài)規(guī)則大全(包括Linux/Windows)
Typecho程序的偽靜態(tài)規(guī)則不同于wp直接默認(rèn)可用,需要我們手工加載到空間中才可以生效。下面老左整理了這款程序在不同的主機(jī)環(huán)境中的偽靜態(tài)規(guī)則,希望對(duì)大家有所幫助2012-09-09解決Centos7安裝nginx后提示“Welcome to nginx on Fedora!”,conf.d目錄下無(wú)d
這篇文章主要介紹了Centos7安裝nginx后提示“Welcome to nginx on Fedora!”,conf.d目錄下無(wú)default.conf文件 ,本文給出了問(wèn)題原因解析及解決方法,需要的朋友可以參考下2019-07-07Centos7實(shí)現(xiàn)MySQL基于日志還原數(shù)據(jù)的示例代碼
這篇文章主要介紹了Centos7實(shí)現(xiàn)MySQL基于日志還原數(shù)據(jù)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07linux文件管理命令實(shí)例分析【權(quán)限、創(chuàng)建、刪除、復(fù)制、移動(dòng)、搜索等】
這篇文章主要介紹了linux文件管理命令,結(jié)合實(shí)例形式分析Linux文件與目錄的權(quán)限控制、創(chuàng)建、刪除、復(fù)制、移動(dòng)、搜索等相關(guān)操作技巧,需要的朋友可以參考下2020-03-03Linux系統(tǒng)使用用戶密鑰ssh主機(jī)訪問(wèn)
這篇文章主要介紹了Linux系統(tǒng)使用用戶密鑰ssh主機(jī)訪問(wèn),它在安全上完全大于直接輸入root 的密碼,有需要的可以了解一下。2016-10-10linux中install命令和cp命令的使用與區(qū)別
相信大家都知道linux中的命令I(lǐng)nstall和cp類(lèi)似,都可以將文件/目錄拷貝到指定的地點(diǎn)。下面這篇文章就詳細(xì)介紹了linux中install命令和cp命令的介紹與區(qū)別。有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2017-01-01