跳至內容

Unix/Shell 和子 Shell 簡介

來自 Wikibooks,開放的書籍,面向開放的世界


Shell 和子 Shell

[編輯 | 編輯原始碼]

當我們開啟一個終端會話時,一個 Shell 會為我們啟動。這就是為什麼我們在終端視窗中看到一個提示符。

在一個 Shell 中,我們可以透過呼叫 Shell 程式檔案或可執行檔案來開啟另一個 Shell - 子 Shell。例如,假設您已經打開了一個 Shell,一個普通的 Shell sh。您會看到這個

A vanilla 'sh' shell in a terminal session.
終端會話中的一個普通的 'sh' Shell。

在這個 Shell 的提示符下,我可以呼叫一個新的子 Shell。我可以使用命令 bash 呼叫 bash Shell。新的 Shell 可以使用命令 exit 關閉。如果我呼叫一個 bash 子 Shell,我會看到類似的東西

A bash shell in a terminal session.
終端會話中的一個 bash Shell。

如果我使用 exit 關閉這個 Shell,我會看到

A subshell closed by exit.
一個由 exit 關閉的子 Shell。

Shell 包含程序和變數

[編輯 | 編輯原始碼]

一個 Shell 提供

  • 一個提示符,供使用者透過啟動、管理、互動和結束程序來進行通訊
  • 一個用於程序和變數的容器

當您呼叫一個子 Shell 時,在這個 Shell 中啟動的任何程序都包含在其中。除非它們被提交到一些持久儲存 - 可能寫入硬碟上的檔案或從父 Shell 匯出到新 Shell,否則任何建立的資料項都會隨著 Shell 的關閉而消失。匯出不在此處介紹:我們暫時假設變數在建立它們的 Shell 中消失。

為了使這更具體,請考慮這個序列。我們從終端會話中的任何 Shell 開始,建立一個 Shell 變數,就像這樣

$ MYVARIABLE="This is the original shell"

要檢查內容,我們可以使用 echo,並在變數名前加上 $,就像這樣

$ echo $MYVARIABLE

現在我們呼叫一個 子 Shell。我們將使用 bash Shell。像這樣

$ bash

這將啟動一個新的 bash 子 Shell,我們可以從更改的提示符中看到,並且在子 Shell 中,我們建立了一個 Shell 變數,就像這樣

bash% MYVARIABLE="This is the subshell.  When it closes, this variable is destroyed!"

要檢查這個變數的內容,我們使用 echo,就像之前一樣

bash% echo $MYVARIABLE

在繼續之前,請確保您知道這將顯示什麼。

現在,如果我們 exit,bash 子 Shell 將關閉,我們將返回到原始 Shell。算出輸入以下內容的結果

$ echo $MYVARIABLE

將是什麼。

華夏公益教科書