Shell 是一個應(yīng)用程序,它的一端連接著 Linux 內(nèi)核,另一端連接著用戶。Shell 是用戶和 Linux 系統(tǒng)溝通的橋梁,我們都是通過 Shell 來管理 Linux 系統(tǒng)。
我們可以直接使用 Shell,也可以輸入用戶名和密碼后再使用 Shell;第一種叫做非登錄式,第二種叫做登錄式。
我們可以在 Shell 中一個個地輸入命令并及時查看它們的輸出結(jié)果,整個過程都在跟 Shell 不停地互動,這叫做交互式。我們也可以運(yùn)行一個 Shell 腳本文件,讓所有命令批量化、一次性地執(zhí)行,這叫做非交互式。
總起來說,Shell 一共有四種運(yùn)行方式:
判斷是否為交互式 Shell 有兩種簡單的方法。
1) 查看變量-的值,如果值中包含了字母i,則表示交互式(interactive)。
【實(shí)例1】在 CentOS GNOME 桌面環(huán)境自帶的終端下輸出-的值:
[jb51.net]$ echo $- himBH
包含了i,為交互式。
【實(shí)例2】在 Shell 腳本文件中輸出-的值:
[jb51.net]$ cat test.sh #!/bin/bash echo $- [jb51.net]$ bash ./test.sh hB
不包含i,為非交互式。注意,必須在新進(jìn)程中運(yùn)行 Shell 腳本。
2) 查看變量PS1的值,如果非空,則為交互式,否則為非交互式,因?yàn)榉墙换ナ綍蹇赵撟兞俊?/p>
【實(shí)例1】在 CentOS GNOME 桌面環(huán)境自帶的終端下輸出 PS1 的值:
[mozhiyan@localhost]$ echo $PS1 [\u@\h \W]\$
非空,為交互式。
【實(shí)例2】在 Shell 腳本文件中輸出 PS1 的值:
[jb51.net]$ cat test.sh #!/bin/bash echo $PS1 [jb51.net]$ bash ./test.sh
空值,為非交互式。注意,必須在新進(jìn)程中運(yùn)行 Shell 腳本。
判斷 Shell 是否為登錄式也非常簡單,只需執(zhí)行shopt login_shell即可,值為on表示為登錄式,off為非登錄式。
shopt 命令用來查看或設(shè)置 Shell 中的行為選項,這些選項可以增強(qiáng) Shell 的易用性。
【實(shí)例1】在 CentOS GNOME 桌面環(huán)境自帶的終端下查看 login_shell 選項:
[jb51.net]$ shopt login_shell login_shell off
【實(shí)例2】按下Ctrl+Alt+Fn組合鍵切換到虛擬終端,輸入用戶名和密碼登錄后,再查看 login_shell 選項:
[jb51.net]$ shopt login_shell login_shell on
【實(shí)例3】在 Shell 腳本文件中查看 login_shel 選項:
[jb51.net]$ cat test.sh #!/bin/bash shopt login_shell [jb51.net]$ bash ./test.sh login_shell off
要同時判斷是否為交互式和登錄式,可以簡單使用如下的命令:
echo $PS1; shopt login_shell
或者
echo $-; shopt login_shell
1) 通過 Linux 控制臺(不是桌面環(huán)境自帶的終端)或者 ssh 登錄 Shell 時(這才是正常登錄方式),為交互式的登錄 Shell。
[jb51.net]$ echo $PS1;shopt login_shell [\u@\h \W]\$ login_shell on
2) 執(zhí)行 bash 命令時默認(rèn)是非登錄的,增加--login選項(簡寫為-l)后變成登錄式。
[jb51.net]$ cat test.sh #!/bin/bash echo $-; shopt login_shell [jb51.net]$ bash -l ./test.sh hB login_shell on
3) 使用由()包圍的組命令或者命令替換進(jìn)入子 Shell 時,子 Shell 會繼承父 Shell 的交互和登錄屬性。此種子進(jìn)程只是又fork創(chuàng)建,沒有執(zhí)行exce,不會重新加載配置文件
[jb51.net]$ bash [jb51.net]$ (echo $PS1;shopt login_shell) [\u@\h \W]\$ login_shell off [jb51.net]$ bash -l [jb51.net]$ (echo $PS1;shopt login_shell) [\u@\h \W]\$ login_shell on
4) ssh 執(zhí)行遠(yuǎn)程命令,但不登錄時,為非交互非登錄式。
[jb51.net]$ ssh localhost 'echo $PS1;shopt login_shell' login_shell off
5) 在 Linux 桌面環(huán)境下打開終端時,為交互式的非登錄 Shell。
桌面環(huán)境下打開終端為交互式的非登錄Shell
到此這篇關(guān)于Shell四種運(yùn)行方式(啟動方式)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Shell 運(yùn)行方式 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:淮南 河北 黔南 隴南 通遼 河池 黔南 常州
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Shell四種運(yùn)行方式(啟動方式)的實(shí)現(xiàn)》,本文關(guān)鍵詞 Shell,四種,運(yùn)行,方式,啟動,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。