掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在Linux系統(tǒng)中,環(huán)境變量是非常重要的。它們可以設(shè)置系統(tǒng)參數(shù)、控制程序行為等等,而且在Linux下,環(huán)境變量是通過export命令來設(shè)置的。然而,在Linux環(huán)境變量的使用過程中,我們經(jīng)常會遇到環(huán)境變量重復(fù)的問題,如何解決這個問題呢?本文將介紹Linux環(huán)境變量重復(fù)的原因及解決方法,幫助大家避免這個問題。

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

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流