2016-06-21 197 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