我有一个设置了多个变量的.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文件获取这些变量的方法。
在子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
声明您不想更改为只读的变量
declare -r VAR3 VAR4
并获取其余部分
. ./myenvs.env