【发布时间】:2021-12-06 14:22:21
【问题描述】:
我想从文件中导出变量。这是我的文件
cat file.txt
VERSION=1.0.0
LOCATION=USA
NAME=sample
ENVIRONMENT=$ENV
我使用这个 while 循环导出该文件上的所有变量
while read vars; do export $vars;done < file.txt
所有变量都已成功导出,ENVIRONMENT 除外
我得到了这个值,ENVIRONMENT=$ENV(预期值是ENVIRONMENT=staging)。
printenv | grep ^ENV
ENV=staging
我的问题是,为什么在使用 while loop 时它不起作用,但如果我们手动导出 (e.g export ENVIRONMENT=$ENV) 时它会起作用??
其实有很多方法,从文件中导出变量,例如我可以使用envsubst < file > file1,然后使用while loop,但我只需要解释上面的情况。
【问题讨论】:
-
你为什么不直接使用
source?还是.以防sh?只需执行source file.txt,所有变量都将在您的环境中 -
因为如果文件中有
#,它将不起作用 -
嗯?
source通过常规解析器运行,因此它可以很好地跳过 cmets。你是什么意思“如果文件中有#将不起作用”? -
请注意,如果您想
export的东西,您需要在获取文件之前启用自动导出。set -a; . file.txt; set +a你来了。 -
@TarasKhalymon,警告:
source file.txt只是设置常规 shell 变量,而不是环境变量,除非file.txt包含export指令或set -a已启用。