我在Linux shell脚本中有一个简单的命令(比如foo.sh)。在其中我这样做:
export INSTALL_DIR=/mnt/share/TEST_Linux
我用:
运行脚本> sh foo.sh
完成后我尝试获取变量,但值为空。
> echo $INSTALL_DIR
如果我直接输入命令,导出的var将变为全局到打开的终端窗口。我正在使用Ubuntu。
答案 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射击然后我的父亲杀了我并且喝了我的血液,那真的很奇怪而且不是很好的类比。
我感到不安还是什么? ; - )