中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Shell四種運行方式/啟動方式如何實現

發布時間:2021-03-15 11:05:13 來源:億速云 閱讀:240 作者:TREX 欄目:開發技術

這篇文章主要介紹“Shell四種運行方式/啟動方式如何實現”,在日常操作中,相信很多人在Shell四種運行方式/啟動方式如何實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Shell四種運行方式/啟動方式如何實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Shell 是一個應用程序,它的一端連接著 Linux 內核,另一端連接著用戶。Shell 是用戶和 Linux 系統溝通的橋梁,我們都是通過 Shell 來管理 Linux 系統。

我們可以直接使用 Shell,也可以輸入用戶名和密碼后再使用 Shell;第一種叫做非登錄式,第二種叫做登錄式。

我們可以在 Shell 中一個個地輸入命令并及時查看它們的輸出結果,整個過程都在跟 Shell 不停地互動,這叫做交互式。我們也可以運行一個 Shell 腳本文件,讓所有命令批量化、一次性地執行,這叫做非交互式。

總起來說,Shell 一共有四種運行方式:

  • 交互式的登錄 Shell;

  • 交互式的非登錄 Shell;

  • 非交互式的登錄 Shell;

  • 非交互式的非登錄 Shell。

判斷 Shell 是否是交互式

判斷是否為交互式 Shell 有兩種簡單的方法。

1) 查看變量-的值,如果值中包含了字母i,則表示交互式(interactive)。

【實例1】在 CentOS GNOME 桌面環境自帶的終端下輸出-的值:

[jb51.net]$ echo $-
himBH

包含了i,為交互式。

【實例2】在 Shell 腳本文件中輸出-的值:

[jb51.net]$ cat test.sh
#!/bin/bash

echo $-
[jb51.net]$ bash ./test.sh
hB

不包含i,為非交互式。注意,必須在新進程中運行 Shell 腳本。

2) 查看變量PS1的值,如果非空,則為交互式,否則為非交互式,因為非交互式會清空該變量。

【實例1】在 CentOS GNOME 桌面環境自帶的終端下輸出 PS1 的值:

[mozhiyan@localhost]$ echo $PS1
[\u@\h \W]\$

非空,為交互式。

【實例2】在 Shell 腳本文件中輸出 PS1 的值:

[jb51.net]$ cat test.sh
#!/bin/bash

echo $PS1
[jb51.net]$ bash ./test.sh

空值,為非交互式。注意,必須在新進程中運行 Shell 腳本。

判斷 Shell 是否為登錄式

判斷 Shell 是否為登錄式也非常簡單,只需執行shopt login_shell即可,值為on表示為登錄式,off為非登錄式。

shopt 命令用來查看或設置 Shell 中的行為選項,這些選項可以增強 Shell 的易用性。

【實例1】在 CentOS GNOME 桌面環境自帶的終端下查看 login_shell 選項:

[jb51.net]$ shopt login_shell
login_shell  off

【實例2】按下Ctrl+Alt+Fn組合鍵切換到虛擬終端,輸入用戶名和密碼登錄后,再查看 login_shell 選項:

[jb51.net]$ shopt login_shell
login_shell  on

【實例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

常見的 Shell 啟動方式

1) 通過 Linux 控制臺(不是桌面環境自帶的終端)或者 ssh 登錄 Shell 時(這才是正常登錄方式),為交互式的登錄 Shell。

[jb51.net]$ echo $PS1;shopt login_shell
[\u@\h \W]\$
login_shell  on

2) 執行 bash 命令時默認是非登錄的,增加--login選項(簡寫為-l)后變成登錄式。

[jb51.net]$ cat test.sh
#!/bin/bash

echo $-; shopt login_shell
[jb51.net]$ bash -l ./test.sh
hB
login_shell  on

3) 使用由()包圍的組命令或者命令替換進入子 Shell 時,子 Shell 會繼承父 Shell 的交互和登錄屬性。此種子進程只是又fork創建,沒有執行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 執行遠程命令,但不登錄時,為非交互非登錄式。

[jb51.net]$ ssh localhost 'echo $PS1;shopt login_shell'

login_shell   off

5) 在 Linux 桌面環境下打開終端時,為交互式的非登錄 Shell。

桌面環境下打開終端為交互式的非登錄Shell

到此,關于“Shell四種運行方式/啟動方式如何實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玉屏| 普格县| 南木林县| 桃园市| 信宜市| 建宁县| 保山市| 双牌县| 石阡县| 蒙自县| 河源市| 青川县| 长岭县| 呼和浩特市| 南木林县| 景宁| 来安县| 陆丰市| 博湖县| 乌兰察布市| 金乡县| 阿瓦提县| 新余市| 始兴县| 宜君县| 皋兰县| 阿城市| 三河市| 青龙| 全州县| 信丰县| 牙克石市| 冀州市| 永平县| 平和县| 佛学| 金川县| 铅山县| 高雄县| 南川市| 昌黎县|