diff --git a/cli/azd/cmd/extensions.go b/cli/azd/cmd/extensions.go index d73dafa5230..0b2a58ac3a2 100644 --- a/cli/azd/cmd/extensions.go +++ b/cli/azd/cmd/extensions.go @@ -182,11 +182,10 @@ func (a *extensionAction) Run(ctx context.Context) (*actions.ActionResult, error } options := &extensions.InvokeOptions{ - Args: a.args, - Env: allEnv, - StdIn: a.console.Handles().Stdin, - StdOut: a.console.Handles().Stdout, - StdErr: a.console.Handles().Stderr, + Args: a.args, + Env: allEnv, + // cmd extensions are always interactive (connected to terminal) + Interactive: true, } _, err = a.extensionRunner.Invoke(ctx, extension, options) diff --git a/cli/azd/pkg/extensions/runner.go b/cli/azd/pkg/extensions/runner.go index 16680fad16f..b3ec3ed2d2d 100644 --- a/cli/azd/pkg/extensions/runner.go +++ b/cli/azd/pkg/extensions/runner.go @@ -15,11 +15,12 @@ import ( ) type InvokeOptions struct { - Args []string - Env []string - StdIn io.Reader - StdOut io.Writer - StdErr io.Writer + Args []string + Env []string + StdIn io.Reader + StdOut io.Writer + StdErr io.Writer + Interactive bool } type Runner struct { @@ -51,16 +52,20 @@ func (r *Runner) Invoke(ctx context.Context, extension *Extension, options *Invo runArgs = runArgs.WithEnv(options.Env) } - if options.StdIn != nil { - runArgs = runArgs.WithStdIn(options.StdIn) - } + if options.Interactive { + runArgs = runArgs.WithInteractive(true) + } else { + if options.StdIn != nil { + runArgs = runArgs.WithStdIn(options.StdIn) + } - if options.StdOut != nil { - runArgs = runArgs.WithStdOut(options.StdOut) - } + if options.StdOut != nil { + runArgs = runArgs.WithStdOut(options.StdOut) + } - if options.StdErr != nil { - runArgs = runArgs.WithStdErr(options.StdErr) + if options.StdErr != nil { + runArgs = runArgs.WithStdErr(options.StdErr) + } } runResult, err := r.commandRunner.Run(ctx, runArgs)