bash shell用乙個叫做環境變數(environment variable)的特性來儲存有關shell會話和工作環境的資訊.環境變數的使用大大方便了程式或者shell中執行的指令碼查詢和訪問記憶體中儲存的資料和系統資訊.
環境變數分為全域性環境變數和區域性環境變數,標準的命名方式是:全域性變數名用大寫字母命名,區域性變數用小寫字母命名.
這裡主要介紹全域性環境變數.
宣告:在bash shell中對環境變數所做的所有操作只對當前shell有效,退出後再開啟,之前的所有設定全部消失.
這裡介紹如何在bash shell中檢視/新增/刪除環境變數.
檢視所有全域性環境變數有兩個命令:env
和printenv
.直接輸入這兩個引數其中乙個就行
檢視某個環境變數,常用兩種方式:printenv 環境變數名
或者echo $環境變數名
.比如檢視環境變數home
的值:
yan@yanubuntu:~$ printenv home/home/yan
yan@yanubuntu:~$ echo
$home
/home/yan
短暫性新增(export
)或者刪除(unset
)
## 新增變數名(建立乙個之前沒有的環境變數)export download=/home/yan/download
## 新增新路徑(如果某個環境變數已經存在,我們要為這個環境變數新增路徑)
export path=/home/yan/anaconda2:$path
##刪除變數名
yan@yanubuntu:~$ printenv download
/home/yan/download
yan@yanubuntu:~$ unset download
yan@yanubuntu:~$ printenv download
可以看到,path變數包含了多個值/路徑,每個值之間用冒號:
隔開(注意windows下面用的是分號;
隔開).
前面提到了,在bash shell中對環境變數的所有操作都是暫時性的,退出當前shell就無效了.如何使得對環境變數的設定永久有效?首先得認識以下幾個檔案:
實際上,當我們登入linux系統時,bash作為預設的shell,它會在幾個檔案中查詢命令.這些檔案稱為啟動檔案或者環境檔案.其中,/etc/profile檔案就是系統預設的bash shell的第一啟動檔案.其中就涉及到了系統環境變數的讀取檔案.所以,可以直接開啟/etc/profile檔案,使用export命令在檔案中新增系統環境變數.
這個檔案的特點是:系統中所有使用者登入時都會執行這個啟動檔案.所以,裡面新增的所有環境變數都系統中的所有使用者有效.
舉個例子,我要將新安裝的anaconda2中的python直譯器作為系統預設的python直譯器,為此,我需要將路徑/home/yan/anaconda2/bin
新增到path環境變數中.可以使用以下命令開啟/etc/profile檔案:
yan@yanubuntu:~$ sudo gedit /etc/profile
開啟後在檔案最後面新增以下語句:
export path=/home/yan/anaconda2/bin:$path
特別的:
在某個環境變數新增新的值和新增乙個新的環境變數相比(以path為例),多了乙個$path
和:
.
網上有人說的不錯,這個有點類似於i=i+1
的味道.
所以有兩種寫法:
export path=/home/yan/anaconda2:$pathexport path=$path:/home/yan/anaconda2
儲存退出,然後在bash中執行source /etc/profile
命令使其生效,或者重啟系統使其生效.
yan@yanubuntu:~$ source /etc/profile
參考ubuntu環境變數——新增與刪除,/etc/environment檔案是登入linux系統時的第二啟動檔案.
使用以下命令開啟/etc/environment檔案:
yan@yanubuntu:~$ sudo gedit /etc/environment
發現裡面只有一行內容:
path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
"
也就是只定義了path環境變數的值,同樣的例子,我們可以將/etc/environment檔案內容改為:
path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/yan/anaconda2/bin
"
也就同樣新增了anaconda2路徑到path環境變數.同樣需執行source命令或者重啟系統使其生效.
同樣,修改/etc/environment檔案也是對所有登入使用者有效.
設定~/.profile檔案同樣可以達到永久設定環境變數的目的,但是它只是對當前使用者有效.
我們知道,linux中的~
就代表了當前使用者的主目錄,比如此時,~/.profile就相當於/home/yan/.profile.
其中yan是我的登入使用者名稱.因此,當前linux系統中建立了幾個使用者,就有幾個~/.profile檔案.當然,對於個人筆記本而言,一般只有乙個登入使用者.
既然搞清楚了,同樣的例子,使用以下命令開啟~/.profile檔案:
yan@yanubuntu:~$ sudo gedit ~/.profile
同樣在/.profile檔案最後新增export命令,下面是/.profile檔案內容,很短:
# ~/.profile: executed by the command interpreter forlogin
shells.
# this
file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for
examples.
# the files are located
in the bash-doc package.
# the default umask is set
in /etc/profile; for
setting the umask
# for
ssh logins, install and configure the libpam-umask package.
#umask
022
# if
running bash
if [ -n "
$bash_version
" ]; then
# include .bashrc
ifit exists
if [ -f "
$home/.bashrc
" ]; then. "
$home/.bashrc"fi
fi# set path so it includes user
's private bin directories
path="
$home/bin:$home/.local/bin:$path
"export path=/home/yan/anaconda2/bin:$path
同樣儲存後執行source命令或者重啟系統使其生效.
最後還有乙個/.bashrc檔案,修改這個檔案同樣可以達到永久設定環境變數的目的,實際上,這個檔案是被上面的/.profile件執行的,以上~/.profile檔案中有這兩句:
if [ -f "$home/.bashrc
" ]; then. "
$home/.bashrc
"
好了,同樣的,使用gedit編輯器開啟~/.bashrc檔案並在檔案末尾加入export命令,儲存後執行source命令或者重啟系統使其生效.
同樣,設定~/.bashrc檔案修改的環境變數也只對當前使用者有效.
永久設定ubuntu(我用的ubuntu16.04),修改以上任意乙個檔案都可以(其實還沒總結完,好像還可以修改/etc/bash.bashrc,/root/bashrc等目錄等可以,沒去試,就試了以上幾個,夠用就行).當為了不影響系統上的其他使用者,最好還是修改自己的~/.profile檔案或者~/.bashrc檔案吧.
關於環境變數的順序問題
我並不是什麼高手,只是想把自己做過的記錄下來,以便以後記不住的時候可以回頭看看,歡迎廣大同志指導改正 在fedora 12上安裝qt 4.6.2總結 首先,fedora 12本身就帶有了qt 3.3和qt 4.5.3版本,在安裝完成qt 4.6.2以後,如果只是增加了環境變數,這時想利用qt 4.6...
關於系統的環境變數
環境變數 environment variables 一般是指在作業系統中用來指定作業系統執行環境的一些引數,如 臨時資料夾 位置和系統資料夾 位置等。環境變數是在作業系統中乙個具有特定名字的物件,它包含了乙個或者多個應用程式所將使用到的資訊。例如windows和dos作業系統中的path環境變數,...
macOS mysql環境變數的問題
在mac系統上安裝mysql之後,配置環境變數。在.bash profile檔案中新增mysql的位址。export path path usr local mysql bin export path path usr local mysql support files執行source bash p...