1

我正在尝试使用 sshj 为 android 编写 ssh 应用程序。我可以毫无问题地连接到服务器并从输入流中读取,得到如下信息:

Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0.29-generic x86_64)

Documentation: https://help.ubuntu.com/

Last login: date time from user`

通常我希望现在得到格式为 user@host:~$ 的输入提示,输入流就在这里结束。我能够毫无问题地写入 shell 并执行命令,但我真的很担心没有得到输入提示,因为知道何时写入输出流和正确格式化很有帮助。当我执行命令时,提示符被写入输入流,它看起来像这样:

"executed command"

user@host:~$ "executed command"

"result"`

我尝试使用 readline() 和 read() 进行读取,并检查流是否有任何数据可供读取。

有什么方法可以让我在不执行命令的情况下接收来自输入流的提示?

4

1 回答 1

2

这个问题可以通过使用如“RudimentaryPTY”示例中所示的 StreamCopier 并将 System.out 重定向到 PrintStream 来规避:

    baos = new ByteArrayOutputStream();
    ps= new PrintStream(baos);
    System.setOut(ps);
    new StreamCopier (shell.getInputStream(),System.out).bufSize(shell.getLocalMaxPacketSize()).spawn("stdout");
    textView.setText(baos.toString("UTF8"));

这个解决方案绝对不是完美的,但它确实有效。我仍然愿意就如何更好地做到这一点提出建议!

于 2012-09-03T19:09:50.527 回答