當前位置:
首頁 > 知識 > linux腳本中父shell與子shell 執行的幾種方式

linux腳本中父shell與子shell 執行的幾種方式

本文主要介紹以下幾個命令的區別:

shell

subshell

source

$ (commond)

`commond`

Linux執行Scripts有兩種方式,主要區別在於是否建立subshell

1. source filename or . filename

不創建subshell,在當前shell環境下讀取並執行filename中的命令,相當於順序執行filename裡面的命令

2. bash filename or ./filename

創建subshell,在當前bash環境下再新建一個子shell執行filename中的命令

子shell繼承父shell的變數,但子shell不能使用父shell的變數,除非使用export

【備註:這和命名空間是相似的道理,甚至和c中的函數也有些類似】

子Shell從父Shell繼承得來的屬性如下:

當前工作目錄

環境變數

標準輸入、標準輸出和標準錯誤輸出

所有已打開的文件標識符

忽略的信號

子Shell不能從父Shell繼承的屬性,歸納如下:

除環境變數和.bashrc文件中定義變數之外的Shell變數

未被忽略的信號處理

3. $ (commond)

它的作用是讓命令在子shell中執行

4. `commond`

和$(commond)差不多。

【這裡的「 ` 」符號是撇(反單引號),不是單引號,是鍵盤上Esc按鍵下面的那個鍵。】

5. exec commond

替換當前的shell卻沒有創建一個新的進程。進程的pid保持不變

作用:

shell的內建命令exec將並不啟動新的shell,而是用要被執行命令替換當前的shell進程,並且將老進程的環境清理掉,而且exec命令後的其它命令將不再執行。

當在一個shell裡面執行exec ls後,會列出了當前目錄,然後這個shell就自己退出了。(後續命令不再執行)

因為這個shell已被替換為僅執行ls命令的進程,執行結束自然也就退出了。

需要的時候可以用sub shell 避免這個影響,一般將exec命令放到一個shell腳本裡面,用主腳本調用這個腳本,調用點處可以用bash a.sh(a.sh就是存放該命令的腳本),這樣會為a.sh建立一個sub shell去執行,當執行到exec後,該子腳本進程就被替換成了相應的exec的命令。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 尤沐西子 的精彩文章:

Nginx能做什麼
如何構建滿足用戶需求的雲環境的五個步驟

TAG:尤沐西子 |