环境变量不会在shell脚本
问题描述:
设置我使用的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身份运行。
答
每个程序都有自己的环境。程序可以更改其环境,并且可以将这些更改传播到其启动的其他程序,但是没有程序可以更改另一个正在运行的程序的环境。
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
被删除或无法访问的情况下过早中止安装文件的处理。