2014-11-06 118 views
0

在我的bash脚本中,我将某些内容更改为我的/etc/profile,并且我做了source /etc/profile,但脚本完成后,更改不会立即生效。例如:如何更改/ etc/profile立即生效内部脚本

#!/bin/bash 

sudo echo "BLAHBLAH_HOME=/opt/BLAHBLAH" >> /etc/profile 
source /etc/profile 
echo $BLAHBLAH_HOME 

根据输出的变化是在脚本的运行时间作出的,但如果我以后运行echo $BLAHBLAH_HOME,变化不是有效的,我不得不再次source /etc/profile。那么,即使在运行脚本之后,如何使更改生效?

回答

0

您在脚本中输入配置文件,因此运行脚本的进程的环境会发生更改,而不是您脚本的外部环境......直到您自己在脚本外部采集脚本。

+0

那么,它们是完全独立的空间,并且不能互相影响?我必须再次从外部获取它以使其在全球范围内有效? – hakunami 2014-11-06 09:35:04

+0

正确。当你启动脚本时,会创建一个新的独立进程,并在该环境中运行bash,并且您对该环境变量所做的任何更改都是该进程的本地进程,并在退出时死掉。然而,在脚本中,你也改变了永久文件系统中的一个项目(即'/ etc/profile'),并且如果你想让你当前输入的shell看到这个改变,你必须告诉它看看'/ etc/etc/profile' - 通过将它发送到你当前的shell(不是你在脚本中启动的那个)。 – 2014-11-06 09:38:35

+0

他们是正确的。事实上,如果你通过“source yourscript.sh”运行你的脚本,它应该工作。 – 2014-11-06 10:00:12