新聞中心
本文主要介紹以下幾個命令的區(qū)別:

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、興安ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的興安網(wǎng)站制作公司
-
shell
-
subshell
-
source
-
$ (commond)
-
commond
Linux執(zhí)行Scripts有兩種方式,主要區(qū)別在于是否建立subshell
1. source filename or . filename
不創(chuàng)建subshell,在當(dāng)前shell環(huán)境下讀取并執(zhí)行filename中的命令,相當(dāng)于順序執(zhí)行filename里面的命令
2. bash filename or ./filename
創(chuàng)建subshell,在當(dāng)前bash環(huán)境下再新建一個子shell執(zhí)行filename中的命令子shell繼承父shell的變量,但子shell不能使用父shell的變量,除非使用export【備注:這和命名空間是相似的道理,甚至和c中的函數(shù)也有些類似】
子Shell從父Shell繼承得來的屬性如下:
-
當(dāng)前工作目錄
-
環(huán)境變量
-
標準輸入、標準輸出和標準錯誤輸出
-
所有已打開的文件標識符
-
忽略的信號
子Shell不能從父Shell繼承的屬性,歸納如下:
-
除環(huán)境變量和.bashrc文件中定義變量之外的Shell變量
-
未被忽略的信號處理
3. $ (commond)
它的作用是讓命令在子shell中執(zhí)行
4. commond
和$(commond)差不多?!具@里的“ ` ”符號是撇(反單引號),不是單引號,是鍵盤上Esc按鍵下面的那個鍵?!?/p>
5. exec commond
替換當(dāng)前的shell卻沒有創(chuàng)建一個新的進程。進程的pid保持不變作用:shell的內(nèi)建命令exec將并不啟動新的shell,而是用要被執(zhí)行命令替換當(dāng)前的shell進程,并且將老進程的環(huán)境清理掉,而且exec命令后的其它命令將不再執(zhí)行。當(dāng)在一個shell里面執(zhí)行exec ls后,會列出了當(dāng)前目錄,然后這個shell就自己退出了。(后續(xù)命令不再執(zhí)行)因為這個shell已被替換為僅執(zhí)行l(wèi)s命令的進程,執(zhí)行結(jié)束自然也就退出了。需要的時候可以用sub shell 避免這個影響,一般將exec命令放到一個shell腳本里面,用主腳本調(diào)用這個腳本,調(diào)用點處可以用bash a.sh(a.sh就是存放該命令的腳本),這樣會為a.sh建立一個sub shell去執(zhí)行,當(dāng)執(zhí)行到exec后,該子腳本進程就被替換成了相應(yīng)的exec的命令。
網(wǎng)站題目:linux執(zhí)行腳本shell與子shell
轉(zhuǎn)載注明:http://m.fisionsoft.com.cn/article/dpidido.html


咨詢
建站咨詢
