创建不写入s​​tdout的用户提示

时间:2016-03-16 04:50:11

标签: bash go

在bash中,有一个名为read的内置函数,它有-p开关。例如:

read -p "Please enter a value: " value
echo "${value}"

如果此文件的执行方式与$ ./bashfile > result.txt

相同

您最终会得到一个包含$value\n但不包含Please enter a value: $value\n

的文件

在go中,你可以做类似的事情。这是一段代码:

fmt.Print("Please enter a value: ")
reader := bufio.NewReader(os.Stdin)
value, _ := reader.ReadString('\n')
fmt.Println(value)

如果您使用$ ./goexecutable > result.txt

进行操作

result.txt的内容看起来像Please enter a value: value\n

是否有一个与read -p中的bash <PROMPT>字符串相同的字符串打印到命令行,而不是stdout?

1 个答案:

答案 0 :(得分:5)

Bash&#39; read -p只是将提示打印到stderr。您可以通过将脚本的stderr重定向到/dev/null并注意到没有提示打印。

 ./bashfile > result.txt 2> /dev/null

您可以使用fmt.Fprintf在Go中执行相同操作。

fmt.Fprintf(os.Stderr, "Please enter a value: ")