diff --git a/internal/cmd/diag.go b/internal/cmd/diag.go index cbe9595842..4d338707c0 100644 --- a/internal/cmd/diag.go +++ b/internal/cmd/diag.go @@ -9,7 +9,6 @@ import ( "github.com/Microsoft/hcsshim/internal/logfields" "github.com/Microsoft/hcsshim/internal/shimdiag" "github.com/Microsoft/hcsshim/internal/uvm" - errorspkg "github.com/pkg/errors" ) // ExecInUvm is a helper function used to execute commands specified in `req` inside the given UVM. @@ -48,13 +47,21 @@ func ExecInShimHost(ctx context.Context, req *shimdiag.ExecProcessRequest) (int, if len(req.Args) > 1 { cmdArgsWithoutName = req.Args[1:] } + np, err := NewNpipeIO(ctx, req.Stdin, req.Stdout, req.Stderr, req.Terminal) + if err != nil { + return 0, err + } + defer np.Close(ctx) cmd := exec.Command(req.Args[0], cmdArgsWithoutName...) - output, err := cmd.CombinedOutput() + cmd.Stdin = np.Stdin() + cmd.Stdout = np.Stdout() + cmd.Stderr = np.Stderr() + err = cmd.Run() if err != nil { if exiterr, ok := err.(*exec.ExitError); ok { - return exiterr.ExitCode(), errorspkg.Wrapf(exiterr, "command output: %v", string(output)) + return exiterr.ExitCode(), exiterr } - return -1, errorspkg.Wrapf(err, "command output: %v", string(output)) + return -1, err } return 0, nil }