2014-11-06 230 views
1

設置我使用的Centos 6.5環境變量不會在shell腳本

我注意到一些我們的軟件是不工作的權利,這是由於路徑錯誤和其他環境設置不正確。我已經運行一些測試和(我不是在Linux方面的專家),當我使用出口命令提示符上設置環境變量,它工作正常,如

export PATH=$PATH:/opt/application 

這將增加正如預期的那樣,添加新添加的默認路徑。

但是,當我把上面的命令放在shell腳本中並運行腳本時,路徑不會改變。

我曾嘗試:

PATH=$PATH:/opt/application 
export PATH 

我想:

PATH=${PATH}:/opt/application 
export PATH 

export PATH=$PATH:/opt/application 

以及

export PATH=${PATH}:/opt/application 

但是,只要您執行回顯env命令,所有返回的是默認的PATH設置。

我找不出爲什麼提示符工作,但shell腳本沒有。我以root身份運行。

回答

1

每個程序都有自己的環境。程序可以更改其環境,並且可以將這些更改傳播到其啓動的其他程序,但是沒有程序可以更改另一個正在運行的程序的環境。

shell提供了特殊的顯着性和對其環境的訪問,但它必須遵守與其他程序相同的規則。當你運行一個shell腳本時,這是一個新的程序(再次)有自己的環境。因此,它對該環境所做的更改不會反映在父shell實例的環境中。

然而,您可以使用shell執行的操作是指示當前的實例從文件中讀取和處理命令,而不是在單獨的(子)shell中運行它們。這就是你的shell配置文件(.bashrc等)如何有效。在bash中,執行該命令的命令拼寫爲.。如果你想這樣做,比方說,個人或全球性的環境設置文件

. /opt/application/env.sh 

,那麼你將是明智的,以保護它一下:你可能會使用這樣的

test -r /opt/application/env.sh && . /opt/application/env.sh 

避免在/opt/application/env.sh被刪除或無法訪問的情況下過早中止安裝文件的處理。