Bash 如何在脚本内部使对/etc/profile的更改立即生效

Bash 如何在脚本内部使对/etc/profile的更改立即生效,bash,command-line,Bash,Command Line,在我的bash脚本中,我将一些内容更改为我的/etc/profile,并且我做了source/etc/profile,但是在脚本完成后,更改不会立即生效。例如: #!/bin/bash sudo echo "BLAHBLAH_HOME=/opt/BLAHBLAH" >> /etc/profile source /etc/profile echo $BLAHBLAH_HOME 根据输出,更改是在脚本运行期间进行的,但是如果我在之后运行echo$BLAHBLAH_HOME,则更改无效

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

#!/bin/bash

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

根据输出,更改是在脚本运行期间进行的,但是如果我在之后运行
echo$BLAHBLAH_HOME
,则更改无效,我必须再次执行
source/etc/profile
。那么,如何使更改在运行脚本后仍然有效

您在脚本中生成概要文件,因此运行脚本的进程的环境将发生更改,而不是您在脚本之外的环境。。。直到您自己在脚本之外找到它。

那么,它们是完全独立的空间,不能相互影响吗?我必须从外部重新获取信息,以使其在全球范围内有效?正确。启动脚本时,将创建一个新的独立进程,bash将在该环境中运行,您对其中的环境变量所做的任何更改都是该进程的局部更改,并在该进程退出时终止。但是,在脚本中,您还更改了永久文件系统中的一个项目(即
/etc/profile
),如果您希望当前正在键入的shell看到该更改,则必须告诉它查看
/etc/profile
,方法是将其源代码化到当前shell中(而不是在脚本中启动的shell)。它们是正确的。事实上,如果您通过“sourceyourscript.sh”运行脚本,它应该可以工作。