交互式shell和非交互式shell、登錄shell和非登錄shell的區別

在解讀shell之前要把bash理解一下,把它看成一種多層的模式。要清楚shell並不是某一個時間裏只能存在一個的。打個比方就是,比如我們進入一個房子,看到門,打開門進去就是進入了一個環境,但是在這裏我們又發現一扇門,當我們打開這扇門進去的時候,就進入了新的環境了,這裏就是新的bash。

用戶登錄linux之後,系統會啓動一個用戶shell,在這個shell裏,可以使用shell命令或者聲明變量,也可以創建shell腳本去運行。當運行shell腳本的時候,系統會創建一個子shell。此時,系統有兩個shell,一個是登錄時系統啓動的shell,一個是系統運行腳本所創建的shell,當這個腳本執行完畢了,這個腳本shell就終止了,也就返回到了執行該腳本之前的shell。證明了用戶可以有很多shell,每個shell都是由父shell派生的。

注意子shell中定義的變量只在該子shell內有效。如果在一個shell腳本程序中定義了一個變量,這個變量只能是這個腳本的局部變量,在其他shell不可用。

Shell的一些配置文件的存放位置,按照範圍可以分成兩種:

1.全局配置
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc

2.個人配置
~/.bash_profile
~/.bashrc

一般情況下,我們都是直接針對全局配置進行操作。

交互式shell和非交互式shell

shell可以通過交互式shell和非交互式shell兩個維度進行分類

1.交互式:在終端上執行,shell等待着輸入,並且立刻執行我們提交的命令。爲什麼叫做交互式呢?因爲shell是直接與用戶進行交互的。這種模式是我們平時一直在用的,登錄、執行命令、退出。當退出之後,shell也就停止了。
2.非交互式:shell script模式,shell不直接和用戶進行交互,而是讀取存放在文件裏的命令去執行他們,當讀到結尾的EOF,shell就停止了。也就是用腳本。

登錄式shell和非登陸式shell

登錄shell:需要用戶名、密碼登錄之後才能進入的shell
非登陸shell:直接不用輸入用戶名和密碼就可以打開的shell

交互式登錄shell和非交互式登錄shell

交互式登錄(清除所有變量,通過文件重新讀入):
1.直接通過終端輸入賬號密碼登錄
2.使用“su -UserName”切換的用戶
執行順序:(影響該shell的配置文件)
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile–> ~/.bashrc–> /etc/bashrc

非交互式登錄(會繼承上一個shell的全部變量):
1.su UserName
2.圖形界面下打開終端
3.執行腳本(進入子shell)
4.任何其他的bash實例
執行順序:(影響該shell的配置文件)
~/.bashrc–> /etc/bashrc–> /etc/profile.d/*.sh

始祖環境變量

登錄系統後,首個執行的應用程序bash(登錄shell)所創建的一堆全局環境變量,它們稱爲始祖環境變量。
這一堆環境變量的生命週期是永久的。啓動shell會執行/etc/profile,導出一些通用全局環境變量,export PATH USER LOGNAME MAIL HOSTNAME等。
所有用戶的shell進程都可以訪問到這些變量,我們可以在裏面添加系統級別的環境變量。然後再依次執行/.bash_profile、/.bash_login、/.profile或者./bashrc,或者/etc/bashrc ,來初始化一些用戶特有的環境變量,需要注意的是後面幾個文件不一定都存在。

全局環境變量的一般使用方法

1.比如在交互式shell中輸入export A=“111”,那麼今後在該控制檯中,直接或間接執行的shell,都將會繼承該控制檯留下來的全局環境變量。
2.有兩個非交互式shell——a.sh和b.sh
a.sh中執行了b.sh
b.sh中執行了export B=“123”

現在執行a.sh,那麼b.sh是其子shell,所以B這個環境變量對a.sh不起作用。證明了全局環境變量只能由創建者shell傳給子孫shell

局部環境變量

不用export導出的環境變量,通常作爲腳本的私有變量。作用域僅僅是創建者shell本身。父shell和子shell都無法訪問。

參考:

https://blog.csdn.net/gui951753/article/details/79154496
https://blog.csdn.net/qq_28992301/article/details/53575041

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