1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| package main
import ( "bufio" "errors" "fmt" "os" "os/exec" "strings" )
func main() { reader := bufio.NewReader(os.Stdin) for { fmt.Print("> ") input, err := reader.ReadString('\n') if err != nil { fmt.Fprintln(os.Stderr, err) }
err = execInput(input) if err != nil { fmt.Fprintln(os.Stderr, err) } } }
var ErrNoPath = errors.New("path required")
func execInput(input string) error { input = strings.TrimSuffix(input, "\n")
args := strings.Split(input, " ")
switch args[0] { case "cd": if len(args) < 2 { return ErrNoPath } err := os.Chdir(args[1]) if err != nil { return err } return nil case "exit": os.Exit(0) }
cmd := exec.Command(args[0], args[1:]...)
cmd.Stderr = os.Stderr cmd.Stdout = os.Stdout
err := cmd.Run() if err != nil { return err } return nil }
|
暂时不支持tab键自动补全命令,只是提供一种简单的思路。