in tools/sh.go [89:112]
func runInteractive(r *interp.Runner, stdin io.Reader, stdout, stderr io.Writer) error {
parser := syntax.NewParser()
fmt.Fprintf(stdout, "@ ")
var runErr error
fn := func(stmts []*syntax.Stmt) bool {
if parser.Incomplete() {
fmt.Fprintf(stdout, "> ")
return true
}
ctx := context.Background()
for _, stmt := range stmts {
runErr = r.Run(ctx, stmt)
if r.Exited() {
return false
}
}
fmt.Fprintf(stdout, "@ ")
return true
}
if err := parser.Interactive(stdin, fn); err != nil {
return err
}
return runErr
}