環境變數的設定方法(轉)~

世界非世界,是名世界!發表於2020-12-17

 

http://man.chinaunix.net/linux/mandrake/cmuo/basics/cbshell5.html
http://www.y nma.org/data/2009/1117/article_4016.htm
http://blog.21ic.com/user1/5397/archives/2008/54040.html

1、首先要了解下.bashrc這個檔案:

在home 目錄下,執行ls .bash*

將看到這些檔案:

  • .bash_history :記錄了您以前輸入的命令,
  • .bash_logout :當您退出 shell 時,要執行的命令,
  • .bash_profile :當您登入 shell 時,要執行的命令,//我的是unt.10,沒有這個檔案;
  • .bashrc :每次開啟新的 shell 時,要執行的命令。

請注意後兩個的區別:‘.bash_profile’只在會話開始時被讀取一次,而‘.bashrc’則每次開啟新的終端(如新的 xterm 視窗)時,都要被讀取。按照傳統,您得將定義的變數,如 PATH ,放到‘.bash_profile’中,而象 aliases(別名)和函式之類,則放在‘.bashrc’。但由於‘.bash_profile’經常被設定成先讀取‘.bashrc’的內容,您如果圖省事的話,就把所有配置都放進‘.bashrc’。

這些檔案是每一位使用者的設定。系統級的設定儲存在‘/etc/profile’、‘/etc/bashrc’及目錄‘/etc /profile.d’下的檔案中。但您得習慣用各自的配置檔案:編輯不需要‘root’許可權,還可以使您的設定更有個性。當系統級與使用者級的設定發生衝 突時,將採用使用者的設定。

讀取‘.bashrc’的內容,您如果要省點事的話,就把您所有的配置都放進‘.bashrc’。

上面的這些檔案是每位使用者的設定,系統級的設定儲存在‘/etc/profile’、‘/etc/bashrc’及目錄‘ /etc/profile.d’下的檔案中。您最好習慣使用各自的配置檔案:編輯不需要‘root’許可權,還可以使您的設定更具個性。當系統級與使用者級的 設定發生衝突時,將優先採用使用者的設定。

* 提示符

每次當您開啟一個控制檯(console)或 xterm 時,最先看到的就是提示符(prompt),類似於:

account@hostname ~ $

在預設設定下,提示符將顯示您的使用者名稱、主機名(預設是‘localhost’)、當前所在目錄(在 Unix 中,‘~’表示您的 home 目錄)。
按照傳統,最後一個字元可以標識您是普通使用者($),還是‘root’(#)。

您可以通過 $PS1 變數來設定提示符。命令

echo $PS1

將顯示當前的設定。其中可用字元的含義在 man bash 的‘PROMPTING’部分有說明。

如何才能完成理想的設定呢?對於健忘的初學者來講,預設設定有些不友好,因為提示符只顯示當前目錄的最後一部分。如果您看到象這樣的提示符

tom@localhost bin $

您的當前目錄可能是‘/bin’、‘/usr/bin’、‘/usr/local/bin’及‘/usr/X11R6/bin’。當然,您可以用

pwd (輸出當前目錄,print working directory)

能不能叫 shell 自動告訴您當前目錄呢?
當然可以。這裡我將提到的設定,包括提示符,大都包含在檔案‘/etc/bashrc’中。您可以通過編輯各自 home 目錄下的‘.bash_profile’和‘.bashrc’來改變設定。

在 man bash 中的‘PROMPTING’部分,對這些引數(parameter)有詳細說明。您可以加入一些小玩意,如不同格式的當前時間,命令的歷史記錄號,甚至不同的顏色。

在‘~/.bashrc’中,我喜歡的設定是://具體什麼意思我也不太清楚

PS1="\[\033[1m\][\w]\[\033[0m\] "

‘root’在‘~/.bashrc’中的設定 是:

PS1="\[\033[0;31m\][\w]\[\033[0m\] "

這樣我得到的提示符就是:

[/usr/bin]

當用‘root’時,變成:

[/usr/bin]

我已經除掉了主機名和使用者名稱,因為我用不著這些。但我首先想一眼就能看出我的身份是普通使用者還是‘root’。注意到,普通使用者的提示符可以是黑底白字,或白底黑字。
要在終端上獲得恰當的顏色調配, 您可以下載 這個指令碼 ,賦予執行許可權(chmod +x color),然後再執行。

一種更適當的設定:

PS1="\u: \w\\$ "

這樣,提示符就變成:

user_name: /usr/bin$

您可以通過命令 export 來測試不同的設定(比如,export PS1="\u: \w\\$ ")。如果找到了適合的提示符,就將設定放到您的‘.bashrc'’中。這樣,每次開啟控制檯或終端視窗時,都會生效。

您甚至可以給提示符設定主題(theme),也就是搭配不同的顏色,使其看起來象很棒的 ol 的 C64 提示符。如果您對此感興趣,可以看一下 Bashish 。

* 改變 $PATH

‘$PATH’與‘$PS1’一樣,也是環境變數。輸入

set

將列出所有當前定義的環境變數。
您看到的這些環境變數在 shell 的配置檔案中定義,可能是使用者自己的配置檔案,也可能是由‘root’通過‘/etc’下面的系統級檔案定義的。如果您使用 X ,更多的一些變數將由 X 、您的視窗管理器或桌面環境的啟動檔案配置。

如果對這些設定不很清楚,您暫時最好不要隨便改動。瞭解如何改變 $PATH 變數很有用,因為這個變數決定了 shell 將到哪些目錄中尋找命令或程式。如果要執行的命令的目錄在 $PATH 中,您就不必輸入這個命令的完整路徑,直接輸入命令就可以了。一些第三方軟體沒有將可執行檔案放到 Linux 的標準目錄中。因此,將這些非標準的安裝目錄新增到 $PATH 是一種解決的辦法。此外,您也將看到如何處理一般的環境變數。

首先,作為慣例,所有環境變數名都是大寫。由於 Linux 區分大小寫,這點您要留意。當然,您可以自己定義一些變數,如‘$path’、‘$pAtH’,但 shell 不會理睬這些變數。
第二點是變數名有時候以‘$’開頭,但有時又不是。當設定一個變數時,您直接用名稱,而不需要加‘$’:

PATH=/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin

獲取變數值的話,就要在變數名前加‘$’:

echo $PATH
/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin

否則的話,變數名就會被當作普通文字了:

echo PATH
PATH

處理 $PATH 變數要注意的第三點是:您不能只替換變數,而是要將新的字串新增到原來的值中。在大多數情況下,您能用‘PATH=/some/directory’,因為這將刪除 $PATH 中其他的所有目錄,這樣您在該終端執行程式時,就不得不給出完整路徑。所以,只能作新增:

PATH=$PATH:/some/directory

這樣,PATH 被設成當前的值(以 $PATH 來表示)+新添的目錄。

到目前為止,您只為當前終端設定了新的 $PATH 變數。如果您開啟一個新的終端,執行 echo $PATH ,將返回舊的 $PATH 值,而看不到您剛才新增的新目錄。因為您先前定義的是一個區域性環境變數(僅限於當前的終端)。
要定義一個全域性變數,使在以後開啟的終端中生效,您需要將區域性變數輸出(export),可以用‘export’命令:

export PATH=$PATH:/some/directory

現在如果您開啟一個新的終端,輸入 echo $PATH ,也能看到新設定的 $PATH 了。請注意,命令‘export’只能改變當前終端及以後執行的終端裡的變數。對於已經執行的終端沒有作用。

為了將目錄永久新增到您的 $PATH ,只要將‘export’的那行新增到您的‘.bash_profile’檔案中。
請不要在‘.bashrc’中設定 PATH ,否則會導致 PATH 中目錄的意外增長。您每次開啟一個新的 shell ,‘.bashrc’都會作用。所以如果在該檔案中新增目錄,您每次開啟一個終端,目錄會被新增。這將導致 PATH 變數由於目錄複製,不斷地增長。

2、接下來就是了解下.bashrc 與 profile 的區別:

要搞清bashrc與profile的區別,首先要弄明白什麼是互動式shell和非互動式shell,什麼是login shell 和non-login shell

互動式模式就是shell等待你的輸入,並且執行你提交的命令。這種模式被稱作互動式是因為shell與使用者進行互動。這種模式也是大多數使用者非常熟悉的:登入、執行一些命令、簽退。當你簽退後,shell也終止了。 shell也可以執行在另外一種模式:非互動式模式。在這種模式下,shell不與你進行互動,而是讀取存放在檔案中的命令,並且執行它們。當它讀到檔案的結尾,shell也就終止了。

bashrc與profile都用於儲存使用者的環境資訊,bashrc用於互動式non-loginshell,而profile用於互動式login shell。系統中存在許多bashrc和profile檔案,下面逐一介紹:

/etc/pro此檔案為系統的每個使用者設定環境資訊,當第一個使用者登入時,該檔案被執行.
並從/etc/profile.d目錄的配置檔案中搜集shell的設定.
/etc/bashrc:為每一個執行bash shell的使用者執行此檔案.當bash shell被開啟時,該檔案被讀取。有些linux版本中的/etc目錄下已經沒有了bashrc檔案。
~/. pro每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當使用者登入時,該
檔案僅僅執行一次!預設情況下,它設定一些環境變數,然後執行使用者的.bashrc檔案.
~/.bashrc:該檔案包含專用於某個使用者的bash shell的bash資訊,當該使用者登入時以及每次開啟新的shell時,該檔案被讀取.

另外,/etc/profile中設定的變數(全域性)的可以作用於任何使用者,而~/.bashrc等中設定的變數(區域性)只能繼承/etc/profile中的變數,他們是"父子"關係.

3、最後就是具體如何設定編輯器的路徑問題了:

在Linux裡設定環境變數的方法(export PATH)
一般來說,配置交叉編譯工具鏈的時候需要指定編譯工具的路徑,此時就需要設定 環境變數。例如我的mips-linux-gcc編譯器在“/opt/a?_rm/build_tools/bin”目錄 下,build_tools就是我的編譯工具,則有如下三種方法來設定環境變數:

1、直接用export命令:
#export PATH=$PATH:/opt/a?_rm/build_tools/bin
檢視是否已經設好,可用命令export檢視:
[root@localhost bin]# export
declare -x BASH_ENV="/root/.bashrc"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost.localdomain"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.GB18030"
declare -x LANG GE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/opt/a?_rm/build_tools"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/a?_rm/build_tools/bin"
declare -x PWD="/opt/a?_rm/build_tools/bin"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_AUTH_SOCK="/tmp/ssh-XX3LKWhz/agent.4242"
declare -x SSH_CLIENT="10.3.37.152 2236 22"
declare -x SSH_CONNECTION="10.3.37.152 2236 10.3.37.186 22"
declare -x SSH_TTY="/dev/pts/2"
declare -x TERM="linux"
declare -x USER="root"
declare -x USERNAME="root"
可以看到,環境變數已經設好,PATH裡面已經有了我要加的編譯器的路徑。

2、修改profile檔案: 
#vi /etc/profile 
在裡面加入:
export PATH="$PATH:/opt/a?_rm/build_tools/bin"

3. 修改.bashrc檔案:
# vi /root/.bashrc
在裡面加入:
export PATH="$PATH:/opt/a?_rm/build_tools/bin"

後兩種方法一般需要重新登出系統才能生效,最後可以通過echo命令測試一下:
# echo $PATH
看看輸出裡面是不是已經有了/my_new_path這個路徑了。

-----------------------------------------------------------------------------------------------------------------------

 “/bin”、“/sbin”、“/usr/bin”、“/usr/sbin”、“/usr/local/bin”等路徑已經在系統環境變數中了,如果可執行檔案在這幾個標準位置,在終端命令列輸入該軟體可執行檔案的檔名和引數(如果需要引數),回車即可。

  如果不在標準位置,檔名前面需要加上完整的路徑。不過每次都這樣跑就太麻煩了,一個“一勞永逸”的辦法是把這個路徑加入環境變數。命令 “PATH=$PATH:路徑”可以把這個路徑加入環境變數,但是退出這個命令列就失效了。要想永久生效,需要把這行新增到環境變數檔案裡。有兩個檔案可 選:“/etc/profile”和使用者主目錄下的“.bash_profile”,“/etc/profile”對系統裡所有使用者都有效,使用者主目錄下 的“.bash_profile”只對這個使用者有效。

  “PATH=$PATH:路徑1:路徑2:...:路徑n”,意思是可執行檔案的路徑包括原先設定的路徑,也包括從“路徑1”到“路徑n”的所 有路徑。當使用者輸入一個一串字元並按回車後,shell會依次在這些路徑裡找對應的可執行檔案並交給系統核心執行。那個“$PATH”表示原先設定的路徑 仍然有效,注意不要漏掉。某些軟體可能還有“PATH”以外型別的環境變數需要新增,但方法與此相同,並且也需要注意“$”。

  注意,與DOS/Window不同,UNIX類系統環境變數中路徑名用冒號分隔,不是分號。另外,軟體越裝越多,環境變數越添越多,為了避免造成混亂,建議所有語句都新增在檔案結尾,按軟體的安裝順序新增。

  格式如下():

  # 軟體名-版本號

  PATH=$PATH:路徑1:路徑2:...:路徑n

  其他環境變數=$其他環境變數:...

  在“profile”和“.bash_profile”中,“#”是註釋符號,寫在這裡除了視覺分隔外沒有任何效果。

  設定完畢,登出並重新登入,設定就生效了。如果不登出,直接在shell裡執行這些語句,也能生效,但是作用範圍只限於執行了這些語句的shell。

  相關的環境變數生效後,就不必老跑到軟體的可執行檔案目錄裡去操作了。

只是簡單的整理下,不過我參考了很多資料的,很辛苦的~

相關文章