如何解决io中的限制:setopts([{echo,false}])和io:getline / 1

时间:2014-10-08 21:31:05

标签: erlang stdout

我正在尝试在我的应用程序中输入密码并使用io:get_line/1,它将字符写入输入的stdout。我的应用程序作为一个escript应用程序运行,由rebar构建。

根据文档,我正在尝试io:setopts([{echo, false}])返回{error,enotsup}并且无法成功完成回显。

我担心直接打开/dev/stdin/dev/stdout因为它不是多平台的。

有关如何使用io:setopts解决echo限制的任何建议,或者知道如何完成我想要做的事情的替代方法?

1 个答案:

答案 0 :(得分:3)

不幸的是,目前还没有简单的方法可以做到这一点。脚本使用旧版本的io服务器。 io:setopts([{echo, false}])io:get_password()都不适用于escript。在Erlang mailing list上有一个关于它的话题。最好的解决方案是使用bash脚本来读取密码:

read -s password
./escript $password

其中escript类似于:

#!/usr/bin/env escript

main([Password]) ->
    io:format(" -> ~p\n", [Password]).