为什么在脚本结束后导出变量为空?

时间:2011-06-29 14:22:41

标签: linux bash ubuntu

我在Linux shell脚本中有一个简单的命令(比如foo.sh)。在其中我这样做:

export INSTALL_DIR=/mnt/share/TEST_Linux

我用:

运行脚本
> sh foo.sh

完成后我尝试获取变量,但值为空。

> echo $INSTALL_DIR

如果我直接输入命令,导出的var将变为全局到打开的终端窗口。我正在使用Ubuntu。

4 个答案:

答案 0 :(得分:7)

设置环境变量是运行脚本的子bash进程的本地变量。要实现您的目标,您需要,如下所示:source foo.sh。这意味着它由您的主要bash进程运行。然后,在脚本完成后,将保留变量的设置。

答案 1 :(得分:4)

变量仅在您正在启动的新shell 中导出。您可能希望使用source执行脚本。

source foo.sh

答案 2 :(得分:1)

我不知道答案,但我知道如何克服它。

# source ./foo.sh
# echo $INSTALL_DIR

这就像魔法一样。

我认为这是因为该脚本在它自己的“shell”中执行。不确定。

答案 3 :(得分:1)

因为您运行的进程(运行脚本的shell)可以执行任何操作,但其操作不会影响父进程(您当前的shell)。

一个有点奇怪的比喻是:我可以拍摄5次龙舌兰酒,我的环境会变得模糊,根据我的感知,重力法则会受到影响。但对我父亲来说,他的环境是一样的,他不会因为我的行为而喝醉。

如果您希望脚本中创建/更改的变量影响当前shell,则应该source脚本作为其他答案指出。请注意,如果脚本执行cd /whatever/path,那么执行此操作也可能会更改shell中生成的工作目录,任何其他已设置但已更改或删除的函数都会以相同的方式受到影响。< / p>

如果我采取5次tekila射击然后我的父亲杀了我并且喝了我的血液,那真的很奇怪而且不是很好的类比。

我感到不安还是什么? ; - )