Elixir或Erlang提示隐藏输入的密码

时间:2016-06-09 08:43:12

标签: erlang command-line-interface elixir erlang-escript

我在elixir中编写CLI,如何在不显示终端输入的情况下提示用户输入密码?

3 个答案:

答案 0 :(得分:0)

显然这有一些问题。目前最好的解决方案似乎是在循环中反复清除输入,如在Hex包管理器中实现的那样:

https://github.com/hexpm/hex/blob/1523f44e8966d77a2c71738629912ad59627b870/lib/mix/hex/utils.ex#L32-L58

答案 1 :(得分:0)

只需编写如下代码,直接从Mix.Tasks.Hex借用该功能,

some_pass = 
  Mix.Tasks.Hex.password_get("Password: ") 
  |> String.replace_trailing("\n","")

如果您在任务中要求输入密码,又不想一遍又一遍地询问密码,则可以将其保存在这样的环境变量中,

:os.putenv(String.to_charlist("SECRET_PASSWORD"), String.to_charlist(some_pass))

当然,可以通过以下方式检索它:

System.get_env("SECRET_PASSWORD")

答案 2 :(得分:0)

您可以使用Erlang {height:100px;} 函数来完成此操作,例如

:io.get_password()

请注意,IO.write("What is your password?") password = :io.get_password() |> List.to_string() 优于对提示使用IO.write/1,因为Mix.shell().info()函数将添加换行符,通常这不是您在提示中想要的。

还建议info将输入作为字符列表返回,因此您可能希望将其转换为二进制,如上所示。

我编写了一个使用上述技术的软件包:https://hex.pm/packages/cowrie