我正在使用Centos 6.5
我注意到我们的一些软件没有正常工作,这是由于路径错误和其他环境设置不正确造成的。当我使用 export 命令在提示符下设置环境变量时,我运行了一些测试并且(我不是Linux上的专家),它工作正常,例如
export PATH=$PATH:/opt/application
这将按预期添加新添加的默认路径。
但是当我将上述命令放在shell脚本中并运行脚本时,路径不会更改。
我试过了:
PATH=$PATH:/opt/application
export PATH
我试过了:
PATH=${PATH}:/opt/application
export PATH
和
export PATH=$PATH:/opt/application
以及
export PATH=${PATH}:/opt/application
但是只要你执行 echo 或 env 命令,你所得到的就是默认的PATH设置。
我无法弄清楚为什么提示有效但shell脚本没有。我是以root身份运行的。
答案 0 :(得分:1)
每个程序都有自己的环境。程序可以改变其环境,它可以将这些更改传播到它启动的其他程序,但是没有程序可以改变另一个正在运行的程序的环境。
shell特别突出并可访问其环境,但它必须遵守与任何其他程序相同的规则。当您运行shell脚本时,这是一个新程序(再次)它自己的环境。因此,它对该环境所做的更改不会反映在父shell实例的环境中。
然而,您可以对shell执行的操作是指示当前实例从文件中读取和处理命令,而不是在单独的(子)shell中运行它们。这是shell配置文件(.bashrc
等)的有效方式。在bash
中,执行此操作的命令拼写为.
。您可以这样使用它:
. /opt/application/env.sh
如果您想在个人或全球环境设置文件中执行此操作,那么您应该明智地保护它:
test -r /opt/application/env.sh && . /opt/application/env.sh
以避免在/opt/application/env.sh
被删除或无法访问时过早中止安装文件的处理。