diff options
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 31 |
1 files changed, 24 insertions, 7 deletions
@@ -4,14 +4,22 @@ import ( "bufio" "fmt" "os" + "os/signal" "strings" "gosh/cmds" "gosh/global" ) +// TODO: iterate through args ahead of time to make things run better func main() { r := bufio.NewReader(os.Stdin) + ch := make(chan os.Signal, 1) + + go func() { + signal.Notify(ch) + signal.Ignore(<-ch) + }() for { d, _ := os.Getwd() @@ -24,19 +32,19 @@ func main() { cmd = strings.TrimSuffix(cmd, "\n") args := strings.Split(cmd, " ") - switch (args[0]) { + switch args[0] { case "cd": - if err := cmds.ChDir(args); err != nil { + if global.ReturnCode, err = cmds.ChDir(args); err != nil { fmt.Fprintln(os.Stderr, err.Error()) } break case "export": - if err := cmds.Export(args); err != nil { + if global.ReturnCode, err = cmds.Export(args); err != nil { fmt.Fprintln(os.Stderr, err.Error()) } break case "unset": - if err := cmds.Unset(args); err != nil { + if global.ReturnCode, err = cmds.Unset(args); err != nil { fmt.Fprintln(os.Stderr, err.Error()) } break @@ -48,17 +56,26 @@ func main() { } break case "test", "[": - global.ReturnCode = cmds.Test(args) + if global.ReturnCode, err = cmds.Test(args); err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + } + break + case "trap": + if global.ReturnCode, err = cmds.Trap(args); err != nil { + fmt.Fprintln(os.Stderr, err.Error()) + } break case ":": + global.ReturnCode = 0 + err = nil break case "exit": - if err := cmds.Exit(args); err != nil { + if err = cmds.Exit(args); err != nil { fmt.Fprintln(os.Stderr, err.Error()) } break default: - cmds.External(args) + global.ReturnCode = cmds.External(args) break } } |