Linux环境变量引用其他变量

标签 linux environment-variables boot

我正在使用来自网络供应商的引导脚本,我在 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 ,其中说 Variable expansion does not work in/etc/environment.), 所以在 V2 的定义中 V1 没有发生变量扩展。因此 V2 没有正确定义。

尝试在系统范围内的 /etc/profile(或其等价物,取决于用户的 shell)或特定用户的 ~/.profiles.

作为最后的手段,您可以直接将 /etc/environment 的相应行复制到上述脚本(但这会使它更难维护)。

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

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

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

关于Linux环境变量引用其他变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37940698/

相关文章:

javascript - Express启动时只执行一次函数

linux - 调用 shell 脚本/。 bash 脚本中的 jar 文件

docker compose build 上的 Dockerfile 传递环境

linux - Systemd 服务在脚本中省略了命令

linux - Fedora 24 启动缓慢,可能由 plymouth-quit-wait.service 引起

php - 如何在运行 CLI 和 Apache2Handler 时将系统环境变量导入 PHP?

linux - Haxe 找不到标准库

linux - 将网页保存到本地框

linux - Sort +4 命令在 Ubuntu 中抛出错误

node.js - 使用来自 Docker 的 env 变量的 React 连接被拒绝错误