登入 Shell 和非登入 Shell 之間的區別
本教程解釋了基於 UNIX 的系統中登入 shell 和非登入 shell 之間的區別。
什麼是基於 UNIX 的系統中的 Shell
基於 UNIX 的系統中的 shell 是使用者和作業系統核心之間的介面。它從使用者那裡獲取輸入並將其傳送到核心,並將結果從核心獲取到使用者。
有兩種型別的 shell,登入 shell 和非登入 shell。
每個 shell 在啟動後都會執行一系列啟動指令碼來設定環境。這些指令碼有不同的用途,它們都會影響環境。
後續指令碼可以覆蓋先前指令碼設定的值。
什麼是基於 UNIX 的系統中的登入 Shell
登入 shell 是使用 /bin/login 通過讀取 /etc/passwd 檔案成功登入後啟動的第一個程序。登入 shell 在你的使用者 ID 下執行。
當你使用終端登入、切換到另一個使用者或使用 SSH 時,會執行登入 shell。
一旦登入 shell 啟動,它就會執行一組啟動指令碼來設定 shell 環境。執行以下指令碼。
- 登入過程執行
/etc/profile。 /etc/profile執行/etc/profile.d中的指令碼- 登入過程執行
~/.bash_profile。 ~/.bash_profile執行~/.bashrc~/.bashrc執行/etc/bashrc
以下命令用於指示 shell 是否為登入 shell。
echo $0
得到 -bash 或 -su 作為輸出表明 shell 是一個登入 shell。記下輸出前的 - 符號。
在下圖中,echo $0 命令的輸出在 bash 前面有一個 -。它表明 shell 是一個登入 shell。

什麼是基於 UNIX 的系統中的非登入 Shell
登入 shell 啟動一個非登入 shell。它可以是一個以沒有登入的程序啟動的 shell,也可以是從另一個 shell 啟動的 shell。程序使用 shell 可執行檔案的名稱來啟動非登入 shell。
將 bash shell 作為非登入 shell 執行會執行以下指令碼。
- 非登入程序執行
~/.bashrc ~/.bashrc執行/etc/bashrc/etc/bashrc執行/etc/profile.d/
要確定 shell 是否為非登入 shell,請執行以下命令。
echo $0
如果輸出是 bash 或 su 而沒有前面的 - 符號,則 shell 是非登入 shell。
我們執行下圖中的 echo $0 命令,輸出顯示 bash 前面的 -。這意味著我們正在使用登入 shell。
要啟動一個非登入 shell,我們輸入 shell 可執行檔案的名稱,在我們的例子中是 bash。我們再次執行 echo $0 命令來檢視新啟動的 shell 是什麼型別的 shell; echo 命令的輸出是 bash 沒有 -。這意味著新 shell 是非登入 shell。

