一、什么是登陸shell?什么是非登陸shell?
1、登陸shell是指:
(1)用戶登陸時(shí),輸入用戶名和密碼后啟動(dòng)的shell;
(2)通過(guò)帶--login參數(shù)的命令:bash --login而啟動(dòng)的shell。
2、非登錄shell指:
用戶登錄后,直接運(yùn)行bash命令啟動(dòng)的shell。
3、對(duì)于用戶來(lái)說(shuō),登陸shell和非登陸shell的主要區(qū)別是:?jiǎn)?dòng)shell時(shí)所執(zhí)行的startup文件不同。
(1)登錄shell的啟動(dòng)文件是/etc/profile、~/.bash_profile
(2) 非登錄shell的啟動(dòng)文件是~/.bashrc
二、bash的運(yùn)行模式
交互式shell
交互式模式就是shell等待你的輸入,并且執(zhí)行你提交的命令。這種模式被稱(chēng)作交互式是因?yàn)閟hell與用戶進(jìn)行交互。
這種模式也是大多數(shù)用戶非常熟悉的:登錄、執(zhí)行一些命令、簽退。當(dāng)你簽退后,shell也終止了。
交互式模式又分為四種類(lèi)型:login,非login,posix以及受限的shell.
確定一個(gè)shell是否是交互式的可以通過(guò)檢測(cè)$PS1環(huán)境變量.
(1) 當(dāng)Bash作為login shell被激活時(shí),它將依次讀取并執(zhí)行以下文件:
/etc/profile,~/.bash_profile,~/.bash_login,~/.profile
使用--noprofile選項(xiàng)激活Bash可以禁止其讀任何初始化文件
在退出時(shí)執(zhí)行 ~/.bash_logout 文件
(2) 當(dāng)Bash作為非login shell被激活時(shí),它將讀取并執(zhí)行~/.bashrc
使用--norc選項(xiàng)激活Bash可以禁止執(zhí)行任何初始化文件,使用
--rcfile file可以指定執(zhí)行的初始化文件.
(3) 當(dāng)Bash作為posix模式被激活時(shí),它將先檢查$ENV變量是否定義.
若定義,Bash讀取并執(zhí)行有$ENV變量擴(kuò)展而得到的文件,否則不再
執(zhí)行任何初始化文件。
(4) 當(dāng)Bash作為受限模式被激活時(shí),它除了禁止某些操作以外,其他行為
于其他模式相同.受限操作有:改變目錄,修改$SHELL和$PATH變量,
運(yùn)行exec,以絕對(duì)路徑運(yùn)行程序以及使用重定向.Bash 1.x中不包含
受限模式.
非交互式shell
shell也可以運(yùn)行在另外一種模式:非交互式模式。在這種模式下,shell不與你進(jìn)行交互,
而是讀取存放在文件中的命令,并且執(zhí)行它們。當(dāng)它讀到文件的結(jié)尾,shell也就終止了。這種
模式主要用來(lái)運(yùn)行Shell腳本.啟動(dòng)后,Bash檢查$BASH_ENV變量,若定義,這執(zhí)行該變量指定文件
中包含的命令.
Bash 的激活選項(xiàng)
-c string 該選項(xiàng)表明string中包含了一條命令.如 bash -c ls ~
-i 使Bash以交互式方式運(yùn)行
-r 使Bash以受限方式運(yùn)行
--login 使Bash以登錄Shell方式運(yùn)行
--posix 使Bash遵循POSIX標(biāo)準(zhǔn)
--verbose 使Bash顯示所有其讀入的輸入行
--help 打印Bash的使用信息
--version 打印版本信息
--noprofile
--norc
--rcfile file