环境变量不适用于shell脚本中的下一个命令

时间:2016-12-06 16:34:54

标签: linux bash shell unix environment-variables

我们有一个名为source.sh的shell脚本,它导出了构建所需的许多ENV变量。

我试图通过在我的脚本中运行source.sh来访问这些ENV变量,但即使在运行之后我也无法访问后续命令的ENV变量。

我的脚本看起来很像:

#!/bin/bash

sh source.sh
cd $ROOT_VOS
make

但这里没有发生cd $ ROOT_VOS

1 个答案:

答案 0 :(得分:2)

sh source.sh

...在source.sh的单独副本中运行sh(实际上,由于您的父shell为bash且孩子为sh,因此它不仅仅是“单独的副本“,这是一个完全不同的翻译)。当单独的解释器退出时,局部变量和对进程本地状态的其他更改都消失了。 (环境变量由子进程继承;它们不会在树中传播给父级)。

相反,请使用:

# POSIX-compliant: execute every command in source.sh in the current shell
. source.sh

...或...

# bash-specific, perhaps more-readable, synonym for the same
source source.sh