2016-07-22 2 views
1

私はSTDIN(以下に記載)から文字列を読み込む方法を理解していますが、私の問題は文字が画面に表示されていることです。 Unix/Linuxのパスワードプロンプトのように文字列を非表示にするにはどうすればよいですか?UNIXスタイルのパスワードreadline

print "Password: " 
pass = gets.as(String).strip 

答えて

2

現在のところ標準ライブラリではこれができません。迅速な回避策はgetpass(3)をバインドすることです:

lib LibC 
    fun getpass(prompt : Char*) : Char* 
end 

def getpass(prompt : String) 
    password = LibC.getpass(prompt) 
    raise Errno.new("getpass") unless password 
    String.new(password) 
end 

password = getpass("Enter password: ") 

しかし、この関数はglibcので廃止され、termios(3)インタフェースを使用する必要があることに注意してください。私は、このためにpull requestを開いたので、うまくいけば、クリスタルバージョン0.19.0以降では、あなたのことができるようになります:

print "Enter password: " 
password = STDIN.noecho &.gets.try &.chomp 
puts 
+1

そして、あなたはそれを右に使用できるよう0.19.0までは、IOを再開し、そのコードを追加することができます離れて:-) – asterite