父shell 和 子shell; shell腳本的幾種執行方式


Linux執行 腳本 有兩種方式,每種方式又有具體不同的執行方法, 主要區別在於是否建立 “子shell 也叫 subshell”。

方式1: source  filename  或者  . filename (點 空格 filename)

  不創建 子shell,在當前 bash 環境下讀取filename中的命令,並執行。

        關於 source  . 方法: 如果filename不在當前路徑下,或者filename不在執行程序默認的搜索路徑下(也就是PATH環境變量), bash可能會提示找不到 filename。

 

方式2: bash filename  或者 sh filename  或者 ./filename (點 斜杠 filename)  或者  /path1/path2/filename (斜杠 加上 絕對路徑)

  創建 子shell, 在當前 bash 環境下 創建一個新的 子shell 來讀取filename中的命令,並執行。filename腳本執行完后,子shell 環境隨即關閉,然后又回到 父shell 中。

  關於 bash  sh   ./ 方法: 如果filename不在當前路徑下,或者filename不在執行程序默認的搜索路徑下(也就是PATH環境變量), bash可能會提示找不到 filename。

  關於 bash 和 sh 方法:filename可以不必事先設定可執行權限。 因為是將filename作為參數傳遞給bash或者sh,是被調用執行。

  關於 ./ 方法: filename必須具備可執行權限,它才可以自己執行。

  額外:子shell 繼承 父shell 的變量, 子shell 通過 export 來使用 父shell 的變量。 (跟編程中的作用於有點兒相似)

  

子shell 從 父shell 繼承如下內容:

  當前工作目錄;

  環境變量;

  標准輸入、標准輸出、標准錯誤輸出;

  所有已打開的文件標識符;

  忽略的信號;

 

子shell 不能從 父shell 繼承的內容如下:

  除環境變量和 .bashrc文件定義的變量之外的shell變量;

  未被忽略的信號;

 

下面編寫一個腳本(a1.sh) 來玩一下這幾種情況:

 

 

 

 

 更多的有關 子shell 繼承 父shell 內容,在 子shell 中使用 從 父shell 里繼承的內容。 以后有使用案例了,在貼上具體的操作過程。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM