2011-06-29 65 views
3

我在Linux shell脚本中有一个简单的命令(比如说foo.sh)。在这里面我这样做:脚本结束后为什么导出变量为空白?

export INSTALL_DIR=/mnt/share/TEST_Linux 

我运行该脚本:

> sh foo.sh 

当它完成我试图让变量,但值为空。

> echo $INSTALL_DIR 

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

回答

7

设置环境变量对运行脚本的子bash进程是本地的。要达到你想要的,你需要来源它是这样的:source foo.sh。这意味着它由你的主bash进程运行。然后,脚本完成后,变量的设置将保持不变。

4

该变量仅在中导出,您刚刚开始使用新壳。你可能想用source来执行你的脚本。

source foo.sh 
1

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

# source ./foo.sh 
# echo $INSTALL_DIR 

它就像魔术一样。

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

1

因为你正在运行(外壳运行脚本)可以为所欲为,但它的行动将不会影响到父进程(当前的shell)的过程。

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

如果你想创建变量/在你的脚本改变影响你当前的shell,你应该source脚本作为其他的答案指出。请注意,如果脚本执行cd /whatever/path,那么执行此操作也可能会更改shell中生成的工作目录,但在shell中,设置但更改或删除的任何其他函数也会受到相同的影响。如果我拿5张tekila照片,然后我父亲杀了我,喝我血

一个非常奇怪的并没有很好的类比是。

我感到不安吗? ;-)

+2

如果你父亲有龙舌兰酒的“来源”,你的父亲会喝醉。 –

相关问题