2016-06-21 109 views
1

我正在使用來自網絡供應商的引導腳本,我在RedHat 7.2上使用此腳本啓動腳本使用多個變量設置環境,但我不認爲這些變量是設置的正確。引用其他變量的Linux環境變量

我已將啓動腳本添加到/ etc/environment中,我可以看到變量已定義並可供所有用戶使用。

這其中的變量是如何在腳本中定義的例子:

export V1=/opt/nameofsupplier/sdk/CentOS-RHEL-7-x86_64 
    export V2=${V1}/lib/cam 

還有很多,如果我嘗試這從一個終端:

cd $V1 

它工作正常,但是如果我嘗試:

cd $V2 

我得到:

base: cd $V1/lib/cam: No such file or directory 

的路徑是有效的,如果我這樣做的外殼:

export V2=${V1}/lib/cam 
    cd $V2 

它的工作沒有任何錯誤,我怎麼修復腳本?

+0

如果你檢查'env'的輸出,你會看到它們嗎?檢查'env | grep^V' – fedorqui

+0

是的,它們都存在。 – SPlatten

+0

他們有什麼價值?你看到'V2 = $ {V1}/lib/cam'還是'V2 =/opt/nameofsupplier/sdk/CentOS-RHEL-7-x86_64/lib/cam'?同時檢查'echo'$ V2「'是否工作 – fedorqui

回答

1

你可能會懷疑這些變量的定義不正確。 /etc/environment只能包含變量定義 - 它不像普通腳本那樣執行(請參閱其文檔here,其中說變量擴展在/ etc/environment中不起作用),因此在V2的定義中沒有變量V1的擴展發生。因此V2未被正確定義。

嘗試在系統範圍/etc/profile(或其等價物,取決於用戶的shell)或特定用戶的~/.profile s中獲取/etc/environment行。

作爲最後的手段,您可以將/etc/environment的相應行簡單地複製到上​​面提到的腳本中(但這會使其難以維護)。

你也可以糾正/etc/environment的定義不依賴於擴張,即是這樣的:

export V2=/opt/nameofsupplier/sdk/CentOS-RHEL-7-x86_64/lib/cam 

(假設不會有太多人予以糾正)。但這也很難維持。

+0

這就是問題所在,將內容移動到/ etc/profile中已解決此問題。 – SPlatten