在bash shell中,環境變數分為兩類:
- 全域變數
- 區域變數
全域環境變數
全域環境變數對于shell會話和所有生成的子shell都是可見的,例如HOME:
[root@localhost ~]# bash // 進入子shell
[root@localhost ~]# ps -f
UID PID PPID C STIME TTY TIME CMD
root 14862 14747 0 04:35 pts/0 00:00:00 -bash
root 15654 14862 0 04:36 pts/0 00:00:00 bash
root 15663 15654 0 04:36 pts/0 00:00:00 ps -f
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# exit
exit
[root@localhost ~]#
區域環境變數
區域環境變數只能在定義它們的行程中可見,Linux也定義了標準的區域環境變數,
使用set命令可以顯示該行程的所有環境變數,包括區域變數、全域變數以及用戶定義變數:
[root@localhost ~]# set
BASH=/bin/bash
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
...
自定義環境變數
可以在bash shell中直接設定自己的變數,
- 自定義區域環境變數
父shell創建的區域環境變數,在子shell中不可見;(子shell區域環境變數,在父shell中不可見),
[root@localhost ~]# my_variable="Hello World"
[root@localhost ~]# echo $my_variable
Hello World
[root@localhost ~]# bash
[root@localhost ~]# echo $my_variable
[root@localhost ~]# exit
exit
[root@localhost ~]# echo $my_variable
Hello World
[root@localhost ~]#
- 自定義全域環境變數
可以通過export命令將區域環境變數匯出到全域環境變數:
[root@localhost ~]# my_variable="I am Global now"
[root@localhost ~]# export my_variable
[root@localhost ~]# echo $my_variable
I am Global now
[root@localhost ~]# bash
[root@localhost ~]# echo $my_variable
I am Global now
[root@localhost ~]# exit
exit
[root@localhost ~]# echo $my_variable
I am Global now
[root@localhost ~]#
在子shell中改變父shell繼承的全域變數后,父shell中的值不會受影響,即使子shell使用了
export命令,
洗掉環境變數
可以通過unset命令來洗掉環境變數,同樣的,在子shell中洗掉父shell繼承的全域環境變數時,對父shell無影響:
[root@localhost ~]# echo $my_variable
I am Global now
[root@localhost ~]# unset my_variable
[root@localhost ~]# echo $my_variable
[root@localhost ~]#
定位系統環境變數
啟動bash shell時會自動讀取一些已持久化的環境變數,具體讀取方式和bash的啟動方式有關:
- 登錄時作為默認登錄shell
- 作為非登錄shell的互動式shell
- 作為運行腳本的非互動shell
1.登錄shell
登錄Linux系統時,bash shell作為登錄shell啟動,會從5個檔案讀取命令:
- /etc/profile
- $HOME/.bash_profile
- $HOME/.bash_login
- $HOME/.profile
- $HOME/.bashrc
其中,/etc/profile是系統默認bash shell的主啟動檔案,系統上每個用戶登錄時都會啟動這個檔案,
在centos系統中,這個檔案會遍歷
/etc/profile.d目錄下以.sh結尾的檔案并運行,所以對于全域的每個用戶都需要的環境變數,我們可以在這個目錄下創建一個相應的檔案,
在/etc/profile啟動完成后,bash會到當前用戶目錄下找尋2、3、4指定的檔案進行運行,按順序找到一個就忽略剩下的,
2.互動式shell行程
如果shell不是在登錄時啟動的(比如命令提示符中敲下bash啟動的),那么這個shell叫作互動式shell,
互動式shell不會訪問/etc/profile,只會檢查用戶HOME目錄下的.bashrc檔案,也即是5,
3.非互動式shell
系統執行shell腳本時,使用的就是非互動式shell,在這種情況下,非互動式shell要想獲得初始的持久化環境變數,可以使用BASH_ENV所指定的位置找尋,
持久化環境變數建議
- 盡量不修改
/etc/profile,最好在/etc/profile.d目錄下創建.sh結尾的檔案, - 對于個人用戶持久化變數,最好是
$HOME/.bashrc,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/86607.html
標籤:Linux
