2014-11-06 174 views
1

设置我使用的Centos 6.5环境变量不会在shell脚本

我注意到一些我们的软件是不工作的权利,这是由于路径错误和其他环境设置不正确。我已经运行一些测试和(我不是在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 

但是,只要您执行回显env命令,所有返回的是默认的PATH设置。

我找不出为什么提示符工作,但shell脚本没有。我以root身份运行。

回答

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