package main import ( "bufio" "fmt" "os" ) import "github.com/codecrafters-io/shell-starter-go/app/runnable" import "github.com/codecrafters-io/shell-starter-go/app/core" func getInput(ctx *core.Context) (string, error) { fmt.Print("$ ") input, err := bufio.NewReader(ctx.Stdin).ReadString('\n') if err != nil { return "", err } return input, nil } func repl(ctx *core.Context) { for { input, err := getInput(ctx) if err != nil { fmt.Fprintln(os.Stderr, "Error reading input: ", err) os.Exit(1) } runnable, err := runnable.Parse(ctx, input) // fmt.Printf("main():runnable=%#v\n", runnable) if err != nil { fmt.Fprintln(ctx.Stderr, err) continue } runnable.Run(ctx) } } func main() { ctx := core.Context{ Stdout: os.Stdout, Stderr: os.Stderr, Stdin: os.Stdin, } repl(&ctx) }