我正在使用来自网络供应商的引导脚本,我在 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)或特定用户的 ~/.profile
s.
作为最后的手段,您可以直接将 /etc/environment
的相应行复制到上述脚本(但这会使它更难维护)。
您还可以更正 /etc/environment
中的定义,使其不依赖扩展,即像这样:
export V2=/opt/nameofsupplier/sdk/CentOS-RHEL-7-x86_64/lib/cam
(假设没有太多需要更正)。但这也很难维护。
关于Linux环境变量引用其他变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37940698/