2014-10-27 67 views
3

我在寫一個簡單的命令行實用程序,它向用戶請求一個密碼。我決定使用bufio閱讀用戶輸入內容,但無法弄清楚如何在用戶終端上隱藏密碼。這是Go的標準庫中的功能,還是我需要使用OS級別的功能來完成這個功能? (這可能只會在Linux上運行,但會更喜歡Windows上的某些功能。)在命令行中使用Go,如何隱藏用戶終端的命令行輸入?

+3

我沒有用它自己,所以我將不會發佈一個答案,但是這可能是你想要什麼:http://godoc.org/code.google的.com/p/gopass – 2014-10-27 19:29:57

回答

3

您想要的是關閉回顯。這通常通過配置終端驅動程序termios來實現。您最好的選擇是閱讀該驅動程序的Linux文檔(termios(3))。就我而言,在閱讀密碼之前,您需要關閉ECHO。讀取密碼後,再次打開ECHO。不要使用bufio,因爲您不希望緩衝區干擾低級終端。您可以從syscall包中訪問需要的系統調用。

termios適用於每個類UNIX平臺。這包括Linux,BSD,OS X和Solaris,但不包括Microsoft Windows。

1

您可以使用termbox,它使用鍵盤輸入而不輸出。到目前爲止,我可以告訴,這在Windows上工作,但我不確定這是否適用於Linux(我想它)。 安裝完成後,會有一個_demos文件夾,該文件夾內有一個名爲keyboard.go的示例。一旦啓動,它將顯示一個鍵盤,並突出顯示按下的按鍵。但是,它在我的電腦上工作,但是當我按空格鍵/輸入/功能鍵或CTRL-(任意)鍵時,程序掛起。也許這是Termbox代碼或內部的錯誤。我還沒有想出來。另外,你需要使用CGO來使用termbox來運行。

截圖:

enter image description here