2016-07-22 59 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)接口应该被使用。我在水晶版本0.19.0打开这个pull request,所以希望以后你就可以:

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

而直到0.19.0您可以重新打开IO,并添加代码,所以你可以使用它的权利离开:-) – asterite