Как я могу получить «подсказку ввода» при чтении из входного потока sshj?

Я пытаюсь написать ssh-приложение для Android, используя sshj. Я могу подключиться к серверу и без проблем читать из потока ввода, получая что-то вроде:

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:~$ сейчас, поместите поток ввода только здесь. Я могу писать в оболочку и выполнять команды без проблем, но меня очень беспокоит отсутствие приглашения на ввод, поскольку полезно знать, когда писать в поток вывода и для правильного форматирования. Когда я выполняю команду, приглашение записывается во входной поток и выглядит так:

"executed command"

user@host:~$ "executed command"

"result"`

Я пробовал читать с помощью readline(), а также read() и проверял, есть ли в потоке какие-либо данные, доступные для чтения.

Есть ли способ получить приглашение от входного потока без выполнения команды?


person Murgi    schedule 02.09.2012    source источник


Ответы (1)


Эту проблему можно обойти, используя StreamCopier, как показано в примере «RudimentaryPTY», и перенаправив 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"));

Это решение, безусловно, не идеально, но оно работает. Я все еще открыт для предложений о том, как сделать это лучше!

person Murgi    schedule 03.09.2012