no login shell和login shell

  no login shell和login shell在啓動和退出時會執行不同的腳本文件從而影響shell中的環境變量,本文根據bash的文檔描述了兩種shell啓動時自動執行的腳本文件的區別。

什麼是nologin shell和login shell?

按照bash文檔的說法,login shell是第0個參數以-開頭或者有一個參數爲-login的shell。

A login shell is one whose first character of argument zero is a -, or one started with the --login option.

根據該定義,我們可以使用bash --login啓動一個login shell或者通過echo $0的輸出結果是否以-開頭來判斷一個shell是否爲login shell。

經過我的測試,通過圖形界面啓動的終端爲no login shell, 而通過ssh遠程連接得到的shell爲login shell。

爲什麼要關注是login shell還是no login shell?

區分login shell和no login shell的主要原因是它們啓動和退出時自動執行的腳本不同。

login shell

對於login shell其啓動時自動執行的腳本文件順序如下

首先執行/etc/profile
再執行~/.bash_profile, ~/.bash_login, ~/.profile中第一個存在的腳本(按順序搜索,只會執行其中一個)

如果shell啓動時添加了--noprofile選項則不會執行上述文件。在login shell退出時,會執行~/.bash_logout

no login shell

對於no login shell,啓動時會執行/etc/bash.bashrc~/.bashrc,如果shell啓動時添加了--norc選項則不會執行上述文件,如果添加了--rcfile <filename>選項則會執行指定的filename文件,也不會執行上述文件。no login shell退出時不會自動執行腳本文件。

總結

login shell和no login shell啓動時執行的腳本文件是完全不同的,因此,運行環境初始化腳本需要合理配置才能讓login shell和no login shell都能執行,同時也可以爲login shell和no login shell配置不同的運行環境初始化腳本。

參考資料

Linux man page(bash)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章