仅从文件中为下一个脚本加载环境变量

问题描述 投票:0回答:2

我有一个设置了多个变量的.env文件之一,例如:

VAR1=111
VAR2=222

我想运行一个使用这些变量的脚本(不进行更改)。我知道我可以在外壳中将该文件source并从该文件中导出变量,例如:

set -a
source myenvs.env   # this is my .env file
set +a
./myscript.sh  # this will use the variables

问题在于它将所有这些变量加载到我的shell中,而我不希望这样做(shell污染。)

我正在寻找的是等价于使用env VAR1=111 VAR2=222 ./myscript.sh,但从.env文件获取这些变量的方法。

bash
2个回答
1
投票

在子shell中这样做,并且主shell的环境不会被更改。例如:

(
  set -a
  source myenvs.env   # this is my .env file
  exec ./myscript.sh  # avoid unnecessary fork()
)

事实是,我需要保持该脚本的灵活性以在不同的设置组合下运行。想象一下,我有几个.env文件,例如development.env,stagin.env,repro-bug-123.env等。

在这种情况下,函数会更有用。

with_env() (
  set -a
  source "$1"
  shift
  exec "$@"
)

with_env myenvs.env ./myscript.sh

0
投票

声明您不想更改为只读的变量

declare -r VAR3 VAR4

并获取其余部分

. ./myenvs.env
© www.soinside.com 2019 - 2024. All rights reserved.