在shell脚本中设置环境variables不会使其对shell可见

我想使用一个可以调用的shell脚本来设置一些环境variables。 但是,脚本执行后,我看不到在bash中使用“printenv”的环境variables。

这是我的脚本:

#!/bin/bash echo "Hello!" export MYVAR=boubou echo "After setting MYVAR!" 

当我做“./test.sh”时,我看到:

 Hello! After setting MYVAR! 

当我做“princessv MYVAR”时,我什么都看不到。

你能告诉我我做错了什么吗?

这是环境变量的工作原理。 每个进程都有一个环境的副本。 进程对其副本所做的任何更改都会传播给进程的子进程。 但是,他们并不传播给过程的父母。

解决这个问题的一个方法是使用source命令:

 source ./test.sh 

要么

 . ./test.sh 

(这两种形式是同义词)。

当你这样做的时候,不是在子shell中运行脚本,而是在脚本中执行每个命令,就像在提示符下键入一样。

另一种方法是让脚本打印你想要设置的变量,并在你的主shell中使用echo export VAR=valueeval "$(./test.sh)" 。 这是各种程序所使用的方法[例如resize,dircolors]提供的环境变量设置。

这只适用于脚本没有其他输出的情况(或者在stderr上出现任何其他输出, >&2