最近做一些小工具,遇到了一个这样的问题.
有这样一个需求 我写了一个命令行工具 允许 cat 1.list | ./gobin "do something" 在执行完获取到1.list的内容之后 判断是否要继续,输入yes or no ,现在有问题就是 第二步的判断会默认取 cat 1.lsit的标准输入
Arrhost,_=ListFile(os.Stdin) 获取cat的内容
判断是否继续
func YesNO(){
var i string
here:
fmt.Printf("Continue (y/n):")
fmt.Scan(&i)
switch i {
case "y": fmt.Println("go on ...")
case "n" : fmt.Println("exit ...") ; os.Exit(1)
default : goto here
}
}
这种需求要怎么做会比较好?谢谢.
写一个简单的例子:
package main
import (
"bufio"
"fmt"
"io"
"log"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
for {
line, err := reader.ReadString('\n')
if err == io.EOF {
break
}
log.Println(line)
YesNO()
}
}
func YesNO() {
var i string
here:
fmt.Printf("Continue (y/n):")
fmt.Scan(&i)
// reader := bufio.NewReader(os.Stdin)
switch i {
case "y":
fmt.Println("go on ...")
case "n":
fmt.Println("exit ...")
os.Exit(1)
default:
goto here
}
}
执行 cat 1.list 或者 echo "abc" 如果没有YesNO 那么可以正常的打印出来.
如果是添加上YesNo了 ,就是我想读取完文件后,判断是否再继续,这个时候就是无限的循环了.
所以执行的时候小心哦.
多谢依云和felix 已经解决.
采用/dev/tty 但是因为直接读取的内容匹配会有问题,应该是有更多的字符,所以直接取第一个字符就可以.最后还是修复了下判断回车 不然会有bug