在命令行中使用Go,如何隐藏用户终端的命令行输入?

时间:2014-10-27 19:28:03

标签: go terminal

我正在编写一个简单的命令行实用程序来请求用户输入密码。我决定使用bufio来阅读用户输入,并且无法弄清楚如何在用户终端上隐藏密码。 Go的标准库中是否有此功能,或者我是否需要使用操作系统级功能来完成此操作? (这可能只会在Linux上运行,但更喜欢在Windows上运行的东西。)

2 个答案:

答案 0 :(得分:3)

你想要的是关闭回声。这通常通过配置终端驱动程序 termios 来实现。最好的办法是阅读该驱动程序的Linux文档(termios(3))。就我而言,您需要在读取密码之前关闭ECHO。阅读密码后,再次打开ECHO。不要使用 bufio ,因为您不希望缓冲干扰低级终端的东西。您可以从syscall包中访问require系统调用。

termios 可在每个类UNIX平台上使用。这包括Linux,BSD,OS X和Solaris,但不包括Microsoft Windows。

答案 1 :(得分:1)

您可以使用在没有输出的情况下使用键盘输入的termbox。到目前为止,我可以说,这适用于Windows,但我不确定这是否适用于Linux(我猜它确实如此)。 安装完成后,有一个_demos文件夹,在这个文件夹里面有一个名为keyboard.go的例子。一旦启动,它将显示一个键盘,并突出显示按下的键。但是,它可以在我的电脑上工作,但是当我按空格键/输入/功能键或CTRL-(任意)键时,程序挂起。也许它是代码中或Termbox内部的错误。我还没弄明白。此外,您需要使用CGO来运行termbox。

截图:

enter image description here

相关问题