summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go31
1 files changed, 24 insertions, 7 deletions
diff --git a/main.go b/main.go
index 5334796..f7520ee 100644
--- a/main.go
+++ b/main.go
@@ -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
}
}