浏览代码

Implement #IZ3

Alois Mahdal 1周前
父节点
当前提交
2e3f746d65
共有 1 个文件被更改,包括 10 次插入3 次删除
  1. 10
    3
      app/main.go

+ 10
- 3
app/main.go 查看文件

5
 	"fmt"
5
 	"fmt"
6
 	"io"
6
 	"io"
7
 	"os"
7
 	"os"
8
+	"strings"
8
 )
9
 )
9
 
10
 
10
 type Context struct {
11
 type Context struct {
52
 	CommandTypeNone CommandType = iota
53
 	CommandTypeNone CommandType = iota
53
 	CommandTypeExternal
54
 	CommandTypeExternal
54
 	CommandTypeBuiltinExit
55
 	CommandTypeBuiltinExit
56
+	CommandTypeBuiltinEcho
55
 )
57
 )
56
 
58
 
57
 func getCommand(ctx *Context) (Command, error) {
59
 func getCommand(ctx *Context) (Command, error) {
68
 	return command, nil
70
 	return command, nil
69
 }
71
 }
70
 
72
 
71
-func parseTokens(str string) []string {
73
+func tokenize(str string) []string {
72
 	tokens := make([]string, 2)
74
 	tokens := make([]string, 2)
73
-	tokens[0] = str[:len(str)-1]
75
+	tokens = strings.Fields(str)
74
 	return tokens
76
 	return tokens
75
 }
77
 }
76
 
78
 
77
 func parseCommand(command_line string) (Command, error) {
79
 func parseCommand(command_line string) (Command, error) {
78
-	tokens := parseTokens(command_line)
80
+	tokens := tokenize(command_line)
79
 	if tokens[0] == "exit" {
81
 	if tokens[0] == "exit" {
80
 		return makeCommand(CommandTypeBuiltinExit, tokens), nil
82
 		return makeCommand(CommandTypeBuiltinExit, tokens), nil
81
 	}
83
 	}
84
+	if tokens[0] == "echo" {
85
+		return makeCommand(CommandTypeBuiltinEcho, tokens), nil
86
+	}
82
 	return makeCommandNone(), fmt.Errorf("%s: command not found", tokens[0])
87
 	return makeCommandNone(), fmt.Errorf("%s: command not found", tokens[0])
83
 }
88
 }
84
 
89
 
89
 		return
94
 		return
90
 	case CommandTypeBuiltinExit:
95
 	case CommandTypeBuiltinExit:
91
 		os.Exit(0)
96
 		os.Exit(0)
97
+	case CommandTypeBuiltinEcho:
98
+		fmt.Fprintln(ctx.stdout, strings.Join(command.tokens[1:], " "))
92
 	}
99
 	}
93
 }
100
 }
94
 
101