Linux 引用其他变量的环境变量

Linux environment variables referencing other variables

我正在使用来自网络供应商的引导脚本,我在 RedHat 7.2 上使用它启动脚本使用几个变量设置环境,但是我认为这些变量设置不正确。

我已将启动脚本添加到 /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

路径有效,如果我在 shell:

中这样做
    export V2=${V1}/lib/cam
    cd $V2

它运行没有任何错误,我该如何修复脚本?

您怀疑这些变量的定义不正确可能是对的。 /etc/environment 只能包含变量定义 - 它不像普通脚本那样执行(请参阅其文档 here,其中说 变量扩展在 /etc/environment 中不起作用。), 所以在 V2 的定义中 V1 没有发生变量扩展。因此 V2 没有正确定义。

尝试在系统范围 /etc/profile(或等效的,取决于用户的 shell)或特定用户的 ~/.profiles.
[ 中获取 /etc/environment 行。 =23=]作为最后的手段,您可以直接将 /etc/environment 的相应行复制到上述脚本中(但这会使维护变得更加困难)。

您还可以更正 /etc/environment 中的定义,使其不依赖扩展,即像这样:

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

(假设没有太多需要更正)。但这也很难维护。