环境变量不会在shell脚本中设置

时间:2014-11-06 22:39:58

标签: shell centos environment-variables

我正在使用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身份运行的。

1 个答案:

答案 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被删除或无法访问时过早中止安装文件的处理。