很多程序和腳本都通過環(huán)境變量來獲取系統(tǒng)信息、存儲臨時(shí)數(shù)據(jù)和配置信息。
bash shell用一個(gè)叫環(huán)境變量(environment variable)的特性來存儲有關(guān)shell會話和工作環(huán)境的信息。
這項(xiàng)特性允許在內(nèi)存中存儲數(shù)據(jù),以便程序能輕松訪問到它們。
在bash shell中,分兩類:
全局變量:對于shell會話和所有生成的子shell都是可見的
局部變量:只對創(chuàng)建的它們的shell可見
查看全局變量, $env $printenv
查看某個(gè)全局變量:$printenv HOME 或者
$echo $PATH // $后面接變量名。能讓變量作為命令行參數(shù)
比如:ls $HOME 相當(dāng)于 ls /home/xiaochongyong
只在定義它們的進(jìn)程中可見。
可分為:標(biāo)準(zhǔn)的局部變量 和 用戶自定義的局部變量
set:顯示為某個(gè)特定進(jìn)程設(shè)置的所有環(huán)境變量(包括全局,標(biāo)準(zhǔn)局部,自定義局部),還會按照字母排序。
$my_variable=hello
$echo $ my_variable
$my_variable="hello xcy" // 兩個(gè)詞時(shí)這么寫,加"" 。=邊上還不能有空格
$echo $ my_variable
父shell中寫了,子shell不一定能用。反之也是。
6.2.1 設(shè)置全局環(huán)境變量。
設(shè)定全局變量的進(jìn)程所創(chuàng)建的子進(jìn)程中,該變量都是可見的。
創(chuàng)建方法:
(1)
$my_variable=hello // 創(chuàng)建環(huán)境變量
$export my_variable // 導(dǎo)出到全局變量中
(2)export $my_variable=new_hello // 這樣是更改值
子shell無法改到父shell中全局變量的值。只在當(dāng)前子shell有效。
$unset my_variable
子shell中刪除了,無法反應(yīng)到父shell中去。
默認(rèn)情況下,bash shell中會用一些特定的環(huán)境變量來定義系統(tǒng)環(huán)境。
這些變量在Linux系統(tǒng)上都已經(jīng)設(shè)置好了。
PATH:定義了用于進(jìn)行命令和程序查找的目錄。
echo $PATH 目錄以冒號隔開。
可以把新的搜索目錄添加到現(xiàn)有的PATH環(huán)境變量中。比如:
gcc hello.c -o xcy
一般只能 ./xcy 運(yùn)行
但是加了環(huán)境變量之后就可以運(yùn)行了。
但是切換到別的目錄還是不行。除非這么加
對PATH的修改只能持續(xù)到退出或重啟系統(tǒng),不能一直持續(xù)。
登入系統(tǒng)啟動一個(gè)bash shell時(shí),默認(rèn)情況下bash會在幾個(gè)文件中查找命令。這種文件叫做啟動文件或環(huán)境文件。
bash檢查的啟動文件取決于啟動bash shell 的方式。啟動方式有三種:
1.登錄shell:登錄系統(tǒng)時(shí),bash shell會作為登錄shell啟動。會從5個(gè)啟動文件里面讀取命令。
(1)/etc/profile (系統(tǒng)默認(rèn)主啟動文件,系統(tǒng)上每個(gè)用戶登錄都會執(zhí)行這個(gè)啟動文件)
(2)HOME/.bash_profile HOME/.bashrc HOME/.bash_login HOME/.profile
這4個(gè)是針對用戶的,提供一個(gè)用戶專屬的啟動文件來定義該用戶所用到的環(huán)境變量。
大多數(shù)Linux發(fā)行版只用到這四個(gè)文件中的一兩個(gè)。不一定每個(gè)用戶都有所有文件。
shell、按照下面的順序運(yùn)行第一個(gè)被找到的文件,余下的被忽略:
HOME/.bash_profile
HOME/.bash_login
HOME/.profile
注意上面沒有HOME/.bashrc 。
HOME/.bashrc 這個(gè)文件通常通過其他文件運(yùn)行。