【发布时间】:2015-12-09 20:53:17
【问题描述】:
我正在使用 System.console().readPassword() 从终端读取密码并执行一组操作。这一切都很好,但是当尝试将输出通过管道传输到 grep、head、awk 等时,它会因 System.console() 返回 null 而中断。
这段代码应该复制它:
public class TestPiping
{
public static void main(String[] args)
{
String password = new String(System.console().readPassword("Whats the password?"));
System.out.println(password);
}
}
然后编译运行它:
$ javac -g TestPiping.java
$ java TestPiping
Whats the password?
hello
$ java TestPiping | head
Exception in thread "main" java.lang.NullPointerException
at TestPiping.main(TestPiping.java:5)
为什么重定向的标准输出会影响标准输入?是否需要在不使用 java.io.console 的情况下手动读取密码?
【问题讨论】:
-
你能把它作为参数传递吗?
-
我已经实现了一个 '--password-file' 选项,但如果用户不需要更改密码技术来重定向标准输出,那就太棒了。