簡體   English   中英

在shell腳本中不會設置環境變量

[英]Environment Variables will not set in shell script

我正在使用Centos 6.5

我注意到我們的某些軟件無法正常工作,這是由於路徑錯誤和其他環境設置不正確造成的。 我進行了一些測試,並且(我不是Linux專家)在使用export命令在提示符下設置環境變量時,它運行良好,例如

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

但是,一旦執行echoenv命令,您所獲得的只是默認的PATH設置。

我無法弄清楚提示為何起作用,但是shell腳本卻不能。 我以root身份運行。

每個程序都有自己的環境。 一個程序可以更改其環境,並且可以使這些更改傳播到它啟動的其他程序,但是任何程序都不能更改另一個正在運行的程序的環境。

外殼賦予了特殊的地位並可以訪問其環境,但是它必須遵守與任何其他程序相同的規則。 當您運行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被刪除或無法訪問的情況下過早中止安裝文件的處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM