| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- 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[:len(input)-1], nil
- }
-
- func repl(ctx *core.Context) {
- for {
- input, err := getInput(ctx)
- if err != nil {
- fmt.Fprintln(os.Stderr, "Error reading input: ", err)
- os.Exit(15)
- }
-
- 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)
- }
|