Ubuntu下設定環境變數 在linux下設定環境變數時,如果只是臨時用一下,可以直接在shell下用set或export命令設定環境變數,如果希望此環境變數每次開機或開啟shell時自動設定而無須每次都手動設定,那麼需要將export命令寫入某個系統檔案中,擁有這種功能的檔案常見的有如下幾個:/etc/environment 或 /etc/profile 或 ~/.profile 或 /etc/bash.bashrc 或~/.bashrc等。有這麼多可以用,到底它們有什麼區別,誰先誰後呢?首先,來看看這幾個檔案都是幹什麼的:1./etc/environment–>是系統在登入時讀取的第一個檔案,用於為所有進程設定環境變數。系統使用此檔案時並不是執行此檔案中的命令,而是根據KEY=VALUE模式的代碼,對KEY賦值以VALUE,因此檔案中如果要定義PATH環境變數,只需加入一行形如PATH=$PATH:/xxx/bin的代碼即可。2./etc/profile–>是系統登入時執行的第二個檔案,可以用於設定針對全系統所有使用者的環境變數。3.~/.profile–>是對應當前登入使用者的profile檔案,用於定製目前使用者的個人工作環境。4./etc/bash.bashrc–>是針對所有使用者的bash初始設定檔案,在此中設定的環境變數將應用於所有使用者的shell中,此檔案會在使用者每次開啟shell時執行一次。5.~/.bashrc–>是對應當前登入使用者的bash初始設定檔案,當使用者每次開啟shell時,系統都會執行此檔案一次。那麼根據以上描述,這幾個檔案的執行先後順序應當是:/etc/enviroment –>/etc/profile –>~/.profile–>/etc/bash.bashrc–> ~/.bashrc為了驗證此順序是否正確,這裡可以做一個小實驗,假定我們登入的使用者名稱為xyz。在/etc/environment中加入一行:ENV_MSG=”this is /etc/environment”這樣也就是添加了一個環境變數ENV_MSG,然後在/etc/profile中加入兩行代碼:echo $ENV_MSG >> /home/xyz/log.txtecho “this is /etc/profile” >> /home/xyz/log.txt這樣,如果/etc/environment在profile之前被系統讀取,則在/home/xyz/log.txt中會先後列印出EVN_MSG的值和 this is /etc/profile這兩條訊息。在/home/xyz/.profile中加入一行代碼:echo “this is .profile” >> /home/xyz/log.txt在/etc/bash.bashrc中加入一行代碼:echo “this is /etc/bash.bashrc” >> /home/xyz/log.txt在/home/xyz/.bashrc中加入一行代碼:echo “this is .bashrc” >> /home/xyz/log.txt然後,重啟電腦,看看log.txt檔案中會是什麼樣子。啟動電腦後以xyz使用者登入並立即開啟/home/xyz/log.txt,可以看到檔案中有如下三行訊息:this is /etc/environmentthis is /etc/profilethis is .profile這說明系統在啟動登入的過程中依次讀取執行了/etc/enviroment、/etc/profile和~/.profile中的內容。然後開啟一個shell視窗,log檔案中就會增加兩行訊息:this is /etc/bash.bashrcthis is .bashrc這說明在開啟shell過程中,系統又依次執行/etc/bash.bashrc和~/.bashrc。如果關閉shell視窗後再次開啟一個新的shell視窗,則log檔案中會又增加兩行同樣的訊息。由此可以獲知,每次開啟一個新shell,系統都會重複執行這兩個檔案,而不會再動那頭三個檔案的內容。接下來我們再開啟/etc/environment ,把剛才寫入的那行改成ENV_MSG=”this is not/etc/environment”,然後登出,重新以xyz登入,結果會發現log檔案中會又多了三行:this is not /etc/environmentthis is /etc/profilethis is .profile這也就看出來,登出重登入也會引發系統對這三個檔案的讀取與執行。不過,如果按下Ctrl+Alt+F1,然後登入xyz,那麼log檔案中會多出來如下幾行,這又是怎麼回事呢?this is /etc/bash.bashrcthis is /etc/environmentthis is /etc/profilethis is .bashrcthis is .profile