我了解如何从 STDIN 读取字符串(如下所述),但我的问题是字符显示在屏幕上。如何使字符串像 Unix/Linux 密码提示一样隐藏?
print "Password: "
pass = gets.as(String).strip
我了解如何从 STDIN 读取字符串(如下所述),但我的问题是字符显示在屏幕上。如何使字符串像 Unix/Linux 密码提示一样隐藏?
print "Password: "
pass = gets.as(String).strip
标准库目前没有为此提供任何方法。一个快速的解决方法是绑定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)
应使用该接口。我为此打开了一个拉取请求,因此希望在 Crystal 版本 0.19.0 或更高版本中,您将能够:
print "Enter password: "
password = STDIN.noecho &.gets.try &.chomp
puts