导出另一个文件中定义的变量

时间:2013-02-15 22:06:01

标签: linux bash shell

我有一个脚本,其中包含一些需要设置为环境变量的变量

变量列表不断变化,在我的最后修改它不是一个选择。知道我该怎么做吗?

示例文件foo.sh

FOO="FOOFOO"
BAR="BARBAR"

2 个答案:

答案 0 :(得分:41)

变量和环境变量之间存在差异。如果您执行. foo.shfoo.sh包含行FOO=value,则会在当前流程中分配变量FOO。它不是环境变量。要成为环境变量(因此可用于子shell),必须将其导出。但是,shell提供了一个选项,使所有变量赋值都将变量提升为环境变量,所以如果您只是这样做:

set -a
. foo.sh
set +a

然后foo.sh中的所有变量赋值将在当前进程中成为环境变量。请注意,这并非严格正确:在bash中,导出变量使其成为当前shell中的环境变量,但在其他shell(例如,破折号)中,导出变量不会使其成为当前shell中的环境变量。 (但它确实会将它设置在子shell的环境中。)然而,在shell的上下文中,如果变量是当前进程中的环境变量并不重要。如果它被导出(因此在任何子进程的环境中设置),则不在环境中的变量在功能上等同于环境变量。

答案 1 :(得分:10)

你在寻找'。'命令(在bash中拼写为'source'):

source foo.sh

由于您还需要将它们导出到环境中,您可能需要做一些额外的工作:

while read -r line; do
    export "$line"
done < foo.sh