bash啓動一共有4種狀況:shell
1.交互式的登陸shell(在physical server前login的)bash
2.交互式的非登陸shell(ssh鏈接的應該算是這種,可是前提是必須已經connected,由於鏈接的實際上是系統上的sshd那個服務。)ssh
3.非交互式的啓動(非交互確定是非登陸的,如在crontab裏運行的script)ide
4.由系統的守護進程啓動(如,sshd,rshd)學習
也算寫過一些Bash腳本的人了,不過對與這幾個概念,還不是很清楚,因而惡補了一下。spa
交互式shell和非交互式shell、登陸shell和非登陸shell的區別。
首先,這是兩個不一樣的維度來劃分的,一個是是否交互式,另外一個是是否登陸。
交互式shell和非交互式shell
交互式模式就是shell等待你的輸入, 而且當即執行你提交的命令。這種模式被稱做交互式是由於shell與用戶進行交互。這種模式也是大多數用戶很是熟悉的:登陸、執行一些命令、簽退。當你簽退後,shell也終止了。
shell也能夠運行在另一種模式:非交互式模式,以shell script(非交互)方式執行。在這種模式下,shell不與你進行交互,而是讀取存放在文件中的命令,而且執行它們。當它讀到文件的結尾,shell也就終止了。
chinaunix論壇中關於登陸shell與非登陸shell、交互式shell與非交互式Shell的討論:
Login Shell:當init3時,mingetty spawn出登陸提示符的時候,你輸入賬號和密碼進入了,出現了shell提示符,這個過程就是登陸外殼;
Interactive Shell:接下來你獲得了一個像root@host />這樣的提示符,你輸入什麼,它就解釋出什麼,這就是交互式外殼;你在當前Shell又fork了一個shell(bash),這個bash也是交互式外殼。一般狀況下interactive shell是login shell派生出來的。
Non Interactive Shell:你可能須要學習寫一個bash script,用外部shell執行:bash script.sh,它(bash)從第一條命令執行到最後一條而後退出,不與你進行任何交互,它就是非交互式外殼。
交互式非登陸shell就是指你在Gnome圖形界面中打開「終端」出來的那種窗口程序,
和登陸shell相比,它是「非登陸」的,你並不須要輸入用戶名和密碼,
和非交互式shell相比,這是「交互式」的,就像你說的那它:你輸入什麼,它就解釋出什麼
執行exit退出非登陸shell狀態; 使用ssh鏈接的,就是非登陸。
執行logout退出登陸shell狀態。
在登陸shell裏,確實只讀取/etc/profile和~/.bash_profile, ~/.bash_login, and ~/.profile按順序最早的一個,並執行其中的命令。除非被 --noprofile選項禁止了;
在非登陸shell裏,確實只讀取/etc/bash.bashrc和~/.bashrcunix