seaweedfs/go/weed/shell.go

62 lines
1.1 KiB
Go
Raw Normal View History

2012-08-24 11:56:09 +08:00
package main
import (
2013-01-17 16:56:56 +08:00
"bufio"
"code.google.com/p/weed-fs/go/glog"
"fmt"
2013-01-17 16:56:56 +08:00
"os"
2012-08-24 11:56:09 +08:00
)
func init() {
2013-01-17 16:56:56 +08:00
cmdShell.Run = runShell // break init cycle
2012-08-24 11:56:09 +08:00
}
var cmdShell = &Command{
2013-01-17 16:56:56 +08:00
UsageLine: "shell",
Short: "run interactive commands, now just echo",
Long: `run interactive commands.
2012-08-24 11:56:09 +08:00
`,
}
2013-01-17 16:56:56 +08:00
var ()
2012-08-24 11:56:09 +08:00
func runShell(command *Command, args []string) bool {
2013-01-17 16:56:56 +08:00
r := bufio.NewReader(os.Stdin)
o := bufio.NewWriter(os.Stdout)
e := bufio.NewWriter(os.Stderr)
prompt := func() {
2013-02-27 14:54:22 +08:00
var err error
if _, err = o.WriteString("> "); err != nil {
glog.V(0).Infoln("error writing to stdout:", err)
2013-02-27 14:54:22 +08:00
}
if err = o.Flush(); err != nil {
glog.V(0).Infoln("error flushing stdout:", err)
2013-02-27 14:54:22 +08:00
}
2013-01-17 16:56:56 +08:00
}
readLine := func() string {
ret, err := r.ReadString('\n')
if err != nil {
fmt.Fprint(e, err)
os.Exit(1)
}
return ret
}
execCmd := func(cmd string) int {
if cmd != "" {
2013-02-27 14:54:22 +08:00
if _, err := o.WriteString(cmd); err != nil {
glog.V(0).Infoln("error writing to stdout:", err)
2013-02-27 14:54:22 +08:00
}
2013-01-17 16:56:56 +08:00
}
return 0
}
2012-08-24 11:56:09 +08:00
2013-01-17 16:56:56 +08:00
cmd := ""
for {
prompt()
cmd = readLine()
execCmd(cmd)
}
return true
2012-08-24 11:56:09 +08:00
}