我在Linux shell脚本中有一个简单的命令(比如说foo.sh)。 其中我这样做:
export INSTALL_DIR=/mnt/share/TEST_Linux
我运行脚本:
> sh foo.sh
当它完成时,我尝试获取variables,但值是空白的。
> echo $INSTALL_DIR
如果我直接input命令,导出的var变成全局的到打开的terminal窗口。 我正在使用Ubuntu。
设置环境变量对运行脚本的子bash进程是本地的。 为了达到你想要的,你需要像这样source foo.sh
: source foo.sh
这意味着它是由你的主bash进程运行的。 然后,脚本完成后,变量的设置将保持不变。
该变量仅在您正在启动的新shell中导出。 你可能想要用source
来执行你的脚本。
source foo.sh
我不知道答案,但我知道如何克服它。
# source ./foo.sh # echo $INSTALL_DIR
这就像魔术一样。
我认为这是因为这个脚本是在自己的“shell”中执行的。 不确定。
因为正在运行的进程(运行脚本的shell)可以执行任何想要的操作,但其操作不会影响父进程(当前shell)。
一个比较奇怪的比喻是:我可以拿5杯龙舌兰酒,环境会变得模糊,重力法则会根据我的感觉受到影响。 但是对我的父亲来说,他的环境是一样的,他不会因为我的行为而喝醉。
如果你想在你的脚本中创建/改变的变量影响你当前的shell,你应该找出其他答案。 请注意,如果脚本执行cd /whatever/path
,那么执行此操作也可能会改变shell中生成的工作目录,而在shell中,同样的方式也会影响已设置但又被更改或删除的其他函数。
如果我拿5个tekila镜头,然后我的父亲杀了我,喝我的血,一个非常奇怪的,不是很好的比喻。
我感到不安或什么? 😉