From cc6b967e0802ba33306274b5a9ac67eb13721041 Mon Sep 17 00:00:00 2001 From: Matthias Simon <5nord@users.noreply.github.com> Date: Mon, 25 Apr 2022 04:21:01 +0200 Subject: [PATCH] Prefer environment variables over local variables (#12) Closes #11 --- fixtures/vars.env | 5 +++++ gotenv.go | 4 ++++ gotenv_test.go | 16 ++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 fixtures/vars.env diff --git a/fixtures/vars.env b/fixtures/vars.env new file mode 100644 index 0000000..043d34f --- /dev/null +++ b/fixtures/vars.env @@ -0,0 +1,5 @@ +A="fromFile" +B="$A" + +D="$C" +C="fromFile" diff --git a/gotenv.go b/gotenv.go index 5f062e5..55c17ab 100644 --- a/gotenv.go +++ b/gotenv.go @@ -220,6 +220,10 @@ func varReplacement(s string, hsq bool, env Env) string { v := mn[3] + if replace, ok := os.LookupEnv(v); ok { + return replace + } + replace, ok := env[v] if !ok { replace = os.Getenv(v) diff --git a/gotenv_test.go b/gotenv_test.go index a289bc6..490e86a 100644 --- a/gotenv_test.go +++ b/gotenv_test.go @@ -243,6 +243,22 @@ func TestLoad_overriding(t *testing.T) { os.Clearenv() } +func TestLoad_overrideVars(t *testing.T) { + os.Setenv("A", "fromEnv") + err := gotenv.Load("fixtures/vars.env") + assert.Nil(t, err) + assert.Equal(t, "fromEnv", os.Getenv("B")) + os.Clearenv() +} + +func TestLoad_overrideVars2(t *testing.T) { + os.Setenv("C", "fromEnv") + err := gotenv.Load("fixtures/vars.env") + assert.Nil(t, err) + assert.Equal(t, "fromEnv", os.Getenv("D")) + os.Clearenv() +} + func TestLoad_Env(t *testing.T) { err := gotenv.Load(".env.invalid") assert.NotNil(t, err)