From 4d0b278e674b4bfbc9b4872ee8437ae78d08f5a2 Mon Sep 17 00:00:00 2001 From: Adam S Levy Date: Mon, 14 Sep 2020 12:53:51 -0800 Subject: [PATCH 1/3] Ignore interrupts and wait for child process to exit fix #21 --- cmd/godotenv/cmd.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/cmd/godotenv/cmd.go b/cmd/godotenv/cmd.go index 8dce420..3eed1ce 100644 --- a/cmd/godotenv/cmd.go +++ b/cmd/godotenv/cmd.go @@ -4,6 +4,9 @@ import ( "flag" "fmt" "log" + "os" + "os/exec" + "os/signal" "strings" @@ -43,12 +46,25 @@ example envFilenames = strings.Split(rawEnvFilenames, ",") } + if err := godotenv.Load(envFilenames...); err != nil { + log.Fatal(err) + } + // take rest of args and "exec" them cmd := args[0] cmdArgs := args[1:] - err := godotenv.Exec(envFilenames, cmd, cmdArgs) - if err != nil { + command := exec.Command(cmd, cmdArgs...) + command.Stdin = os.Stdin + command.Stdout = os.Stdout + command.Stderr = os.Stderr + + signal.Ignore(os.Interrupt) + if err := command.Start(); err != nil { + log.Fatal(err) + } + + if err := command.Wait(); err != nil { log.Fatal(err) } } From 50c650856b73a349f17737f71783c954b11036c4 Mon Sep 17 00:00:00 2001 From: Adam S Levy Date: Mon, 14 Sep 2020 12:57:38 -0800 Subject: [PATCH 2/3] Simplify to command.Run --- cmd/godotenv/cmd.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cmd/godotenv/cmd.go b/cmd/godotenv/cmd.go index 3eed1ce..bac3276 100644 --- a/cmd/godotenv/cmd.go +++ b/cmd/godotenv/cmd.go @@ -60,11 +60,7 @@ example command.Stderr = os.Stderr signal.Ignore(os.Interrupt) - if err := command.Start(); err != nil { - log.Fatal(err) - } - - if err := command.Wait(); err != nil { + if err := command.Run(); err != nil { log.Fatal(err) } } From 0db61399c7f8d3ae983cd33aad99759247be4528 Mon Sep 17 00:00:00 2001 From: Adam S Levy Date: Mon, 14 Sep 2020 13:38:44 -0800 Subject: [PATCH 3/3] Add comment --- cmd/godotenv/cmd.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmd/godotenv/cmd.go b/cmd/godotenv/cmd.go index bac3276..ee38613 100644 --- a/cmd/godotenv/cmd.go +++ b/cmd/godotenv/cmd.go @@ -59,7 +59,10 @@ example command.Stdout = os.Stdout command.Stderr = os.Stderr + // Ignore interrupts so we don't exit before the sub-process does. + // This signal will still get passed to the sub-process. signal.Ignore(os.Interrupt) + if err := command.Run(); err != nil { log.Fatal(err) }