1

我了解如何从 STDIN 读取字符串(如下所述),但我的问题是字符显示在屏幕上。如何使字符串像 Unix/Linux 密码提示一样隐藏?

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

1 回答 1

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)应使用该接口。我为此打开了一个拉取请求,因此希望在 Crystal 版本 0.19.0 或更高版本中,您将能够:

print "Enter password: "
password = STDIN.noecho &.gets.try &.chomp
puts
于 2016-07-23T11:34:30.770 回答