code: func prepareInteractiveCommand(ctx *ServerContext) (*exec.Cmd, error) {
  	var (
  		err      error
  		runShell bool
  	)
  	// determine shell for the given OS user:
  	if ctx.ExecRequest.GetCommand() == "" {
  		runShell = true
  		cmdName, err := shell.GetLoginShell(ctx.Identity.Login)
  		ctx.ExecRequest.SetCommand(cmdName)
  		if err != nil {
  			log.Error(err)
  			return nil, trace.Wrap(err)
  		}
  		// in test mode short-circuit to /bin/sh
  		if ctx.IsTestStub {
  			ctx.ExecRequest.SetCommand("/bin/sh")
  		}
  	}
  	c, err := prepareCommand(ctx)
  	if err != nil {
  		return nil, trace.Wrap(err)
  	}
  	// this configures shell to run in 'login' mode. from openssh source:
  	// "If we have no command, execute the shell.  In this case, the shell
  	// name to be passed in argv[0] is preceded by '-' to indicate that
  	// this is a login shell."
  	// https://github.com/openssh/openssh-portable/blob/master/session.c
  	if runShell {
  		c.Args = []string{"-" + filepath.Base(ctx.ExecRequest.GetCommand())}
  	}
  	return c, nil
  }
docs: // prepareInteractiveCommand configures exec.Cmd object for launching an
  // interactive command (or a shell).