package bash import ( "bufio" "fmt" "os" "strings" "github.com/cametendo/bash-for-windows/internal/shell" ) func Run() error { args := os.Args[1:] if len(args) > 0 { if args[0] == "-c" && len(args) > 1 { // Execute a command string return runCommand(strings.Join(args[1:], " ")) } // Run a script file return runFile(args[0]) } return interactive() } func runCommand(cmd string) error { sh := shell.New() return sh.Execute(cmd) } func runFile(path string) error { data, err := os.ReadFile(path) if err != nil { return fmt.Errorf("%s: %v", path, err) } sh := shell.New() return sh.Execute(string(data)) } func interactive() error { sh := shell.New() reader := bufio.NewReader(os.Stdin) fmt.Println("bash-for-windows v1.0.0") for { fmt.Print("bash$ ") input, err := reader.ReadString('\n') if err != nil { break } input = strings.TrimSpace(input) if input == "" { continue } if input == "exit" { break } if err := sh.Execute(input); err != nil { fmt.Fprintf(os.Stderr, "bash: %v\n", err) } } return nil }