新聞中心
在Linux系統(tǒng)中,環(huán)境變量是非常重要的。它們可以設(shè)置系統(tǒng)參數(shù)、控制程序行為等等,而且在Linux下,環(huán)境變量是通過(guò)export命令來(lái)設(shè)置的。然而,在Linux環(huán)境變量的使用過(guò)程中,我們經(jīng)常會(huì)遇到環(huán)境變量重復(fù)的問(wèn)題,如何解決這個(gè)問(wèn)題呢?本文將介紹Linux環(huán)境變量重復(fù)的原因及解決方法,幫助大家避免這個(gè)問(wèn)題。

創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)長(zhǎng)沙縣,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):18982081108
一、為什么會(huì)出現(xiàn)環(huán)境變量重復(fù)?
在Linux系統(tǒng)中,環(huán)境變量有很多種設(shè)置方法。例如,在.bashrc或.profile等文件中設(shè)置環(huán)境變量;或者通過(guò)export命令設(shè)置環(huán)境變量。在這些設(shè)置中,如果不小心重復(fù)設(shè)置了相同的環(huán)境變量,就會(huì)導(dǎo)致環(huán)境變量重復(fù)。此外,在使用腳本或程序時(shí),也有可能會(huì)因?yàn)榄h(huán)境變量重復(fù)的問(wèn)題而出現(xiàn)錯(cuò)誤。
二、如何避免環(huán)境變量重復(fù)?
為了避免環(huán)境變量重復(fù)的問(wèn)題,我們需要學(xué)習(xí)以下幾個(gè)技巧:
(1)清理系統(tǒng)中已經(jīng)設(shè)置的環(huán)境變量
在系統(tǒng)中清理環(huán)境變量可以大大降低出現(xiàn)重復(fù)的概率,因?yàn)槟闱謇砜樟酥暗沫h(huán)境變量,就不會(huì)存在了??梢允褂胾nset命令來(lái)清理環(huán)境變量。例如,如果要清除$JAVA_HOME環(huán)境變量,可以運(yùn)行以下命令:
unset JAVA_HOME
(2)將環(huán)境變量設(shè)置到特定的腳本或程序中
我們可以將環(huán)境變量設(shè)置到特定的腳本或程序中,而不是將它們放在全局環(huán)境中。這樣做的好處是,環(huán)境變量只會(huì)對(duì)該腳本或程序有效,不會(huì)對(duì)其他腳本或程序造成影響。
(3)使用標(biāo)準(zhǔn)路徑
如果使用標(biāo)準(zhǔn)路徑,就不必?fù)?dān)心文件路徑與別名的沖突。例如,安裝軟件時(shí)可以選擇使用默認(rèn)的路徑,而不是將軟件安裝到非標(biāo)準(zhǔn)路徑。
三、如何解決環(huán)境變量重復(fù)?
即使我們已經(jīng)嘗試了上述方法,還是可能會(huì)遇到環(huán)境變量重復(fù)的問(wèn)題。在這種情況下,我們可以采取以下措施:
(1)使用echo命令查看環(huán)境變量
在命令行下,我們可以使用echo命令來(lái)查看環(huán)境變量的值。例如,如果想查看JAVA_HOME環(huán)境變量的值,可以運(yùn)行以下命令:
echo $JAVA_HOME
這樣就可以確定是否存在重復(fù)的環(huán)境變量。
(2)刪除不必要的環(huán)境變量
如果遇到重復(fù)的環(huán)境變量,我們可以先刪除不必要的環(huán)境變量??梢允褂胾nset命令刪除環(huán)境變量。例如,如果要?jiǎng)h除$JAVA_HOME環(huán)境變量,可以運(yùn)行以下命令:
unset JAVA_HOME
(3)重復(fù)的環(huán)境變量
如果有兩個(gè)相同的環(huán)境變量,可以使用alias命令為它們?cè)O(shè)置別名。例如,如果有兩個(gè)JAVA_HOME環(huán)境變量,可以使用以下命令為它們?cè)O(shè)置別名:
alias java_home2=’export JAVA_HOME=/usr/lib/java2′
這樣就可以將其中一個(gè)環(huán)境變量重命名為java_home2,避免出現(xiàn)沖突。
(4)優(yōu)先使用環(huán)境變量
如果有兩個(gè)命令重名,可以使用which命令查看命令的路徑。例如,如果要查看ls命令的路徑,可以輸入:
which ls
這樣就可以確定哪個(gè)路徑中的ls命令會(huì)被執(zhí)行。如果要優(yōu)先使用某個(gè)路徑中的ls命令,可以通過(guò)設(shè)置PATH環(huán)境變量來(lái)實(shí)現(xiàn)。
Linux環(huán)境變量的設(shè)置和使用非常重要,避免和解決環(huán)境變量重復(fù)問(wèn)題需要掌握一些技巧。在使用Linux時(shí),我們應(yīng)該盡可能地避免出現(xiàn)環(huán)境變量重復(fù)的問(wèn)題,同時(shí),也需要及時(shí)處理出現(xiàn)的問(wèn)題,確保系統(tǒng)的正常運(yùn)行。
相關(guān)問(wèn)題拓展閱讀:
- linux系統(tǒng)下環(huán)境變量的問(wèn)題
- Linux環(huán)境變量定義問(wèn)題
- LINUX環(huán)境變量問(wèn)題?。?!
linux系統(tǒng)下環(huán)境變量的問(wèn)題
你需要把這些變量放到.bashrc或者bash_profile等,Linux一般有好幾個(gè)放環(huán)境變量的文件,按照級(jí)別不同在調(diào)用時(shí)不一含鏈樣。
還有,如果你只是打開(kāi)終端然后執(zhí)行 export ***********,那么只會(huì)在這個(gè)終端,這次使用有效,下次使用就會(huì)談圓孫被一個(gè)也是腔顫類(lèi)似于.bashrc這樣的文件執(zhí)行,取消掉這個(gè)環(huán)境變量,所以就不好使了。
試試看把這個(gè)lib放到這個(gè)環(huán)境變慶升量中LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/bin/va_demo_1.15/usr/local/lib
至于沒(méi)有.bash_profile的話,可以手廳差拆動(dòng)自己創(chuàng)建的
默認(rèn)的bash腳扮棗本放在/etc/profile中
Linux環(huán)境變量定義問(wèn)題
一.暫時(shí)使用
亦即重啟拿棚或旅敏叢注銷(xiāo)后就失效了。
使用 PATH=$PATH:目錄:目錄… 直接賦值。如export PATH=$PATH:/in。
二.長(zhǎng)期使用
在全拆櫻局文件 /etc/profile 中或用戶自定義文件 ~/.bash_profile 中添加上述命令即可!
八 環(huán)境變量
8.1 查看環(huán)境變量
$ env? 顯示所有的環(huán)境變量設(shè)置
$ echo $ENV_VARIABLE ? 顯示指定環(huán)境變量的設(shè)置
例:
$ echo $PATH
/bin:/etc:/usr/bin:/tcb/bin
8.2 設(shè)定環(huán)境變量
$ ENV_VARIABLE=XXX;export ENV_VARIABLE
例:
$ PATH=$PATH:$INFORMIXDIR/bin;export PATH ? 將環(huán)境變量PATH設(shè)定為原PATH值+$INFORMIXDIR/bin
8.3 取消環(huán)境變量設(shè)置
$ unset $ENV_VARIABLE
例:
$ set GZJ=gzj;export GZJ ? 設(shè)置環(huán)境變量GZJ
$ echo $GZJ
gzj? 顯示環(huán)境變量值
$ unset $GZJ ? 取消環(huán)境變量GZJ的設(shè)置
$ echo $GZJ
? 已取消
一 makefile規(guī)則
makefile是一個(gè)make的規(guī)則描述腳本文件,包括四種類(lèi)型行:目標(biāo)行、命令行、宏定義行和make偽指令行(如“include”)。makefile文件中注釋以“#”開(kāi)頭。當(dāng)一行寫(xiě)不下時(shí),可以用續(xù)行符“\”轉(zhuǎn)入下一行。
1.1 目標(biāo)行
目標(biāo)行告訴make建立什么。它由一個(gè)目標(biāo)名表后面跟冒號(hào)“:”,再跟一個(gè)依賴(lài)性表組成。
例:
example: depfile deptarget
該目標(biāo)行指出目標(biāo)example與depfile和deptarget有依賴(lài)關(guān)系,如果depfile或deptarget有修改,則重新生成目標(biāo)。
example1 example2 example3: deptarget1 deptarget2 depfile
該目標(biāo)行指出目標(biāo)名表中的example1、example2、example3這三個(gè)各自獨(dú)立的目標(biāo)是用相同的依賴(lài)列表和規(guī)則生成的。
clean:
空的依賴(lài)列表說(shuō)明目標(biāo)clean沒(méi)有其他依賴(lài)關(guān)系。
目標(biāo)行鏈讓后續(xù)的以Tab 開(kāi)始的行是指出目標(biāo)的生成規(guī)則,該Tab字符不能以空格代替。例如:
example.o:example.c example.h
cc –c example.c
該例子指出棚亂局目標(biāo)example.o依賴(lài)于example.c和example.h。如果example.c或example.h其中之一改變了,就需要執(zhí)行命令cc –c example.c重新生成目標(biāo)example.o。
可以用文件名模式匹配來(lái)自動(dòng)為目標(biāo)生成依賴(lài)表,如:
prog: *.c
以下是一個(gè)簡(jiǎn)單的makefile的例子:
圖 1 最簡(jiǎn)單的makefile例
make使用makefile文件時(shí),從之一個(gè)目標(biāo)開(kāi)始掃描。上例中的之一個(gè)目標(biāo)為all,所以目標(biāo)clean不會(huì)自動(dòng)被執(zhí)行,可以通過(guò)命令make clean來(lái)生成目標(biāo)。
1.2 命令行
命令行用來(lái)定義生成目標(biāo)的動(dòng)作。
在目標(biāo)行中分號(hào)“;”后面的文件都認(rèn)為是一個(gè)命令,或者一行以Tab制表符開(kāi)始的也是命令。
如在上面的makefile例中,第三行以Tab字符開(kāi)始的cc命令即是一個(gè)命令行,說(shuō)明要生成hello應(yīng)執(zhí)行的命令。也可以寫(xiě)成:hello:hello.o;cc –陪拍c hello –L…
一般情況下,命令行的命令會(huì)在標(biāo)準(zhǔn)輸出中回顯出來(lái),如對(duì)上面的makefile執(zhí)行make時(shí),標(biāo)準(zhǔn)輸出如下:
cc -c hello.c
cc -o hello -L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11 hello.o
cc -c hello1.c
cc -o hello1 -L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11 hello1.o
如果不希望命令本身回顯,可在命令前加@字符,如在上例中不希望回顯cc –c hello.c和cc –c hello1.c,可修改makefile文件如下:
圖 2 抑制回顯的makefile例
對(duì)該makefile文件執(zhí)行make時(shí),標(biāo)準(zhǔn)輸出如下:
cc -o hello -L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11 hello.o
cc -o hello1 -L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11 hello1.o
可以看出,命令行前有@字符的不回顯。
1.3 宏定義行
在makefile中,可以使用宏定義減少用戶的輸入,例如上例中對(duì)hello和hello1的編譯選項(xiàng)均為“-L/usr/X11R6/lib -L/usr/lib -lXm -lXt -lX11”,此時(shí)可以用宏來(lái)代替,如:
圖 3 使用宏定義的makefile例
宏定義的基本語(yǔ)法是:
name=value
在定義宏時(shí),次序不重要。宏不需要在使用前定義。如果一個(gè)宏定義多次,則使用最后一次的定義值。
可以使用“$”字符和“()”或“{}”來(lái)引用宏,例如:
cc –o hello.o $(CCFLAGS) hello.o
也可以將一個(gè)宏賦值給另一個(gè)宏,但這樣的定義不能循環(huán)嵌套,如:
A=value1
B=value2
C=$(A) $(B)等價(jià)于C=value1 value2
1.4 偽指令
makefile大部分由宏定義行、命令行和目標(biāo)行組成。第四種類(lèi)型是make偽指令行。make偽指令沒(méi)有標(biāo)準(zhǔn)化,不同的make可能支持不同的偽指令集,使得makefile有一定的不兼容性。如果要考慮移植性問(wèn)題,則要避免使用make偽指令。但有一些偽指令,如include,由于使用比較多,很多不同make都提供該偽指令。
1.4.1 偽指令include
該偽指令類(lèi)似C語(yǔ)言中的#include,它允許一次編寫(xiě)常用的定義并包括它。include偽指令必須在一行中,之一個(gè)元素必須是include,并且跟一個(gè)要包含的文件名,如:
include default.mk
1.4.2 偽指令“#”
“#”字符也是make的偽指令,它指出“#”后面的文件是注釋?zhuān)纾?/p>
PROGNAME=test # define macro
#don’t modify this
二 后綴規(guī)則
2.1 雙后綴規(guī)則
在前面的makefile例中有許多重復(fù)內(nèi)容,例如,生成hello和hello1的命令類(lèi)似,生成hello.o和hello1.o的命令也類(lèi)似,除了編譯或鏈接的文件不一樣外,其它均相同,這時(shí),我們就可以使用后綴規(guī)則。首先看一個(gè)雙后綴的例子:
圖 4 使用雙后綴規(guī)則的makefile例
后綴規(guī)則使用特殊的目標(biāo)名“.SUFFIXES”。
之一行中.SUFFIXES的依賴(lài)表為空,用來(lái)清除原有的后綴規(guī)則,因?yàn)?SUFFIXES可以在makefile中多次使用,每一次都將新的后綴規(guī)則加入以前的后綴規(guī)則中。
第二行中指定后綴規(guī)則為“.c .o”,即表示將所有的.c文件轉(zhuǎn)換為.o文件。
第三行指定將.c文件轉(zhuǎn)換成.o文件的方法。$(CC)為make的預(yù)定義宏,其默認(rèn)值為cc,$
第六行指定目標(biāo)hello和hello1的生成方法。$@為特殊的宏,代替當(dāng)前的目標(biāo)名,即hello和hello1,$@.o即為hello.o和hello1.o。
上例介紹的是雙后綴規(guī)則,即它包含兩個(gè)后綴,如.c.o,用來(lái)把一個(gè)C源文件編譯為目標(biāo)文件。雙后綴規(guī)則描述如何由之一個(gè)后綴類(lèi)型的文件生成第二個(gè)后綴類(lèi)型的文件,例如:.c.o規(guī)則描述如何由.c文件生成.o文件。
2.2 單后綴規(guī)則
單后綴規(guī)則描述了怎樣由指定后綴的文件生成由它基名為名字的文件。例如使用單后綴規(guī)則.c,可以由hello.c和hello1.c生成hello和hello1文件。例如將前面的makefile改為:
圖 5 使用單后綴規(guī)則的makefile例
由于.c后綴規(guī)則為make標(biāo)準(zhǔn)后綴規(guī)則,make為其指定了相應(yīng)的命令行,所以在makefile中可以不用再指定其目標(biāo)生成的具體命令行。
下表是make提供的標(biāo)準(zhǔn)后綴規(guī)則。
表 1 make標(biāo)準(zhǔn)后綴規(guī)則
后綴規(guī)則 命令行
.c $(LINK.c) –o $@ $
.c.ln $(LINK.c) $(POUTPUT OPTPUT OPTION) –i $
.c.o $(COMPILE.c) $(OUTPUT OPTION) $
.c.a $(COMPILE.c) –o $% $
$(AR) $(ARFLAGS) $@ $%
$(RM) $%
三 特殊目標(biāo)
在后綴規(guī)則中使用了特殊目標(biāo).SUFFIXES,用來(lái)指定新增的后綴規(guī)則。make還提供了幾個(gè)特殊目標(biāo)來(lái)設(shè)置make的行為,下面為一些特殊的目標(biāo):
? .IGNORE
make在執(zhí)行命令行時(shí),如果返回的是錯(cuò)誤碼,make的缺省動(dòng)作是停止并退出。增加該目標(biāo)后,make將忽略命令行返回的錯(cuò)誤碼,并繼續(xù)執(zhí)行后續(xù)的操作。
? .SILENT
前面已經(jīng)介紹過(guò),make在執(zhí)行命令行時(shí)會(huì)回顯命令行內(nèi)容,在命令行前增加“@”字符將抑制該命令行的回顯。
如果增加該目標(biāo),所有的命令行不再回顯,相當(dāng)于在每個(gè)命令行前均增加了“@”字符。
? .PRECIOUS
當(dāng)收到一個(gè)信號(hào)或從shell命令返回非零的錯(cuò)誤碼時(shí),make刪除它所有已建立的文件。但有些文件即使出了錯(cuò)誤,用戶也不想讓make刪除,這些文件可以作為.PRECIOUS目標(biāo)的參數(shù)。它可以在一個(gè)makefile中出現(xiàn)多次,每一次都累積文件列表。
? .SUFFIXES
它為makefile指定新的后綴規(guī)則,新的后綴規(guī)則作為.SUFFIXES的依賴(lài)表給出。.SUFFIXES可以在一個(gè)makefile中多次使用,每一次都將新的后綴規(guī)則加入以前的后綴規(guī)則中,如果.SUFFIXES的依賴(lài)表為空,則設(shè)置后綴規(guī)則表為空。
四 特殊的宏
為簡(jiǎn)單使用規(guī)則,make提供了幾個(gè)特殊的宏:
? $@
整個(gè)當(dāng)前目標(biāo)名的值可以由宏“$@”來(lái)代替。
? $
當(dāng)前的源文件由“$
? $*
當(dāng)前目標(biāo)的基名由宏“$*”來(lái)代替。例如目標(biāo)的名字是hello.o,則基名就是除去了后綴.o的hello。
以上介紹的特殊宏使用了make自身的規(guī)則,用戶不可以改變。下表介紹了C中預(yù)定義的宏。
用途 宏 默認(rèn)值
庫(kù)文檔匯編命令 AR ar
ARFLAGS rv
AS as
ASFLAGS
COMPILE.s $(AS) $(ASFLAGS) $(TARGET ARCH)
C編譯器命令 CC cc
CFLAGS
CPPFLAGS
COMPILE.c $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET ARCH) –c
LINK.c $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET ARCH)
鏈接編輯器命令 LD ld
LDFLAGS
rm命令 RM rm
后綴列表 SUFFIXES .o .c .c~ .s .s~ .S .S~ .ln .f .f~ .F .F~ .l .mod .mod~ .sym
.def .def~ .p .p~ .r .r~ .y .y~ .h .h~ .sh .sh~ .cps .cps~
五 makefile的應(yīng)用
當(dāng)調(diào)用make時(shí),它在當(dāng)前目錄下搜索文件名是“makefile”或“Makefile”的文件,并執(zhí)行。
如果不想使用上述缺省文件,可以使用命令行中的“-f”來(lái)指定文件,如將編寫(xiě)的makefile命名為mklib,則指定為“make –f mklib”。
PATH=/user/in
export PATH
#查看變量
echo $PATH
LINUX環(huán)境變量問(wèn)題?。?!
export PATH=$PATH:/喚攜手usr/和嫌lpp/mmfs/bin/
寫(xiě)隱畢到/etc/profile里
每次用戶登錄都可以加載了
修改bashrc文件叢大,這種方法更為安全,它可蔽鄭渣以把使用這些環(huán)境變量的權(quán)限控制到用戶級(jí)別,這里是針對(duì)某一特定的用戶,如果你需要給某個(gè)用戶權(quán)限使用這些環(huán)境變量,你只需要修改宏悄其個(gè)人用戶主目錄下的 .bashrc文件就可以了。
在下面添加:
Export PATH=”$PATH:/usr/lpp/mmfs/bin/mmgetstate”
你是我見(jiàn)過(guò)懸賞更高的人
留連戲蝶時(shí)時(shí)舞,自在嬌鶯恰恰啼.
關(guān)于linux 環(huán)境變量 重復(fù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專(zhuān)業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)站標(biāo)題:Linux環(huán)境變量重復(fù):如何避免和解決?(linux環(huán)境變量重復(fù))
標(biāo)題鏈接:http://m.5511xx.com/article/cohheoi.html


咨詢(xún)
建站咨詢(xún)
