2013-12-16 200 views
0

我正在執行remsh到服務器並讀取for循環中文件的內容。文件包含一個目錄的路徑,它的名稱包含一個env變量。UNIX:無法獲得env變量的值

文件內容如下。 ENV_VARIABLE包含目錄的一些路徑。

$ENV_VARIABLE/somepath 

我正在運行命令如下。

remsh server -l user ' . ./.profile;echo $ENV_VARIABLE for i in `cat filename do; echo $i;done' 

當上述命令執行時,它會產生下面的輸出。

VALUE_OF_ENV_VARIABLE/somepath 
    $ENV_VARIABLE/somepath 

爲什麼ENV_VARIABLE從文件中不被替換它的價值,而讀取相同ENV_VARIABLE替換它與「迴響」的價值?

如何從文件中讀取ENV_VARIABLE值?

+0

獲得的變量之前是ENV_VARIABLE遠程./.profile?或者在呼叫服務器(即本地)之一上?如果是遠程的:'remsh server -l user'。 ./.profile;回聲「ENV_VARIABLE = $ ENV_VARIABLE」;爲我在$(貓的文件名);做回聲「$我」;完成'。如果是本地的話:'remsh server -l user「./.profile; echo'ENV_VARIABLE = $ ENV_VARIABLE';對於我在$(cat文件名)中執行echo \」\ $ i \「; done」'(我假設「文件名「和」.profile「都是遠程的) –

+0

是的,它是在遠程服務器上定義的,我可以通過運行remsh服務器-l用戶來使用echo $ ENV_VARIABLE打印它的值。 ./.profile;echo $ ENV_VARIABLE'。但是當我試圖通過從文件中讀取來打印它的值時,它給了我ENV_VARIABLE而不是它的值。 – Jitu

回答

0

在閱讀您的評論後,顯然問題是cat filename,它只是在沒有內插的情況下生成文件的原始內容。如果要執行變量替換,則需要在該輸出上使用eval

所以,我認爲你想要的是:

remsh server -l user ' . ./.profile;echo $ENV_VARIABLE; for i in `cat filename` ; do eval echo $i ; done' 

注意eval使用從文件

+0

它在遠程shell中定義,我可以通過echo $ ENV_VARIABLE打印它的值。文件也包含相同的變量,但是當我試圖通過回顯打印它的值時,它給了我ENV_VARIABLE而不是它的值。 – Jitu

+0

,因爲您只是使用'cat'來輸出文件,這不會插入變量。 – Donovan