From c0d8a4f3bc18a085461416c0f3dfbc58d2fbae21 Mon Sep 17 00:00:00 2001 From: AzraelSec Date: Mon, 11 Sep 2023 23:16:12 +0200 Subject: [PATCH] feat: add env variable handling for subcommand --- pkg/shell/errors.go | 3 +++ pkg/shell/sync_shell.go | 14 ++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/pkg/shell/errors.go b/pkg/shell/errors.go index 1359f19..186a175 100644 --- a/pkg/shell/errors.go +++ b/pkg/shell/errors.go @@ -3,6 +3,9 @@ package shell import "strings" func IgnoreInterrupt(e error) error { + if e == nil { + return e + } if strings.Contains(e.Error(), "signal: interrupt") { return nil } diff --git a/pkg/shell/sync_shell.go b/pkg/shell/sync_shell.go index 090f3a3..388d73e 100644 --- a/pkg/shell/sync_shell.go +++ b/pkg/shell/sync_shell.go @@ -2,7 +2,9 @@ package shell import ( "context" + "fmt" "io" + "os" "os/exec" ) @@ -17,7 +19,7 @@ type syncShell struct { type ShellOps struct { ShellPath string ExecPath string - Env []string + Env map[string]string Cmd string Ctx context.Context } @@ -41,13 +43,17 @@ func NewSyncShell(ops ShellOps) *syncShell { process.Dir = ops.ExecPath } if len(ops.Env) != 0 { - process.Env = ops.Env + vars := os.Environ() + for key, val := range ops.Env { + vars = append(vars, fmt.Sprintf("%s=%s", key, val)) + } + process.Env = vars } return &syncShell{ ctx: &ops.Ctx, process: process, - Pid: -1, + Pid: -1, } } @@ -62,5 +68,5 @@ func (ss *syncShell) Start(w io.Writer) (int, error) { } ss.Pid = ss.process.Process.Pid error = ss.process.Wait() - return ss.process.ProcessState.ExitCode(), error + return ss.process.ProcessState.ExitCode(), IgnoreInterrupt(error) }