func cmdShell(app *cli.App) { cli.OsExiter = func(c int) {} reader := bufio.NewReader(os.Stdin) sigs := make(chan os.Signal, 1) go func() { for range sigs { fmt.Printf("\n(type quit or q to exit)\n\nblesh >") } }() defer close(sigs) signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) for { fmt.Print("blesh > ") text, _ := reader.ReadString('\n') text = strings.TrimSpace(text) if text == "" { continue } if text == "quit" || text == "q" { break } app.Run(append(os.Args[1:], strings.Split(text, " ")...)) } signal.Stop(sigs) }
func cmdConsole(app *cli.App, c *cli.Context) error { // don't hard exit on mistyped commands (eg. check vs check_tx) app.CommandNotFound = badCmd for { fmt.Printf("\n> ") bufReader := bufio.NewReader(os.Stdin) line, more, err := bufReader.ReadLine() if more { return errors.New("Input is too long") } else if err != nil { return err } args := []string{"tmsp-cli"} args = append(args, strings.Split(string(line), " ")...) if err := app.Run(args); err != nil { // if the command doesn't succeed, inform the user without exiting fmt.Println("Error:", err.Error()) } } }
func cmdBatch(app *cli.App, c *cli.Context) error { bufReader := bufio.NewReader(os.Stdin) for { line, more, err := bufReader.ReadLine() if more { return errors.New("Input line is too long") } else if err == io.EOF { break } else if len(line) == 0 { continue } else if err != nil { return err } args := []string{"tmsp-cli"} if c.GlobalBool("verbose") { args = append(args, "--verbose") } args = append(args, strings.Split(string(line), " ")...) app.Run(args) } return nil }