package main import ( "bufio" "fmt" "os" "strings" "gosh/cmds" "gosh/global" ) func main() { r := bufio.NewReader(os.Stdin) for { d, _ := os.Getwd() fmt.Printf("gosh-0.1:%s$ ", abbr(d)) cmd, err := r.ReadString('\n') if err != nil && err.Error() == "EOF" { fmt.Println() continue } cmd = strings.TrimSuffix(cmd, "\n") args := strings.Split(cmd, " ") switch (args[0]) { case "cd": if err := cmds.ChDir(args); err != nil { fmt.Fprintln(os.Stderr, err.Error()) } break case "export": if err := cmds.Export(args); err != nil { fmt.Fprintln(os.Stderr, err.Error()) } break case "unset": if err := cmds.Unset(args); err != nil { fmt.Fprintln(os.Stderr, err.Error()) } break case "set": if len(args) == 1 { cmds.PrintEnv() } else { cmds.Set(args) } break case "test", "[": global.ReturnCode = cmds.Test(args) break case ":": break case "exit": if err := cmds.Exit(args); err != nil { fmt.Fprintln(os.Stderr, err.Error()) } break default: cmds.External(args) break } } } func abbr(dir string) string { home, _ := os.UserHomeDir() if dir == home { return "~" } dirs := strings.Split(dir, "/") return dirs[len(dirs)-1] }