Удаление содержимого оболочки (например, приглашений) из вывода команды в JSch

Я успешно отправил SSH в узел, отправил входные данные и получил выходные данные. После ввода строки строка выводится на консоль, за которой следует пустая строка, а затем вывод печатается дважды. Я не хочу, чтобы ввод выводился на консоль после ввода, ни пустая строка, ни вывод во второй раз. Ниже код у меня есть

public void runSession() {
    try {
        Channel channel = session.openChannel("shell");
        channel.setInputStream(System.in, true);
        channel.setOutputStream(System.out, true);
        channel.connect(defaultChannelTimeout);

        while (channel.getExitStatus() == -1) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                System.out.println(e);
            }
        }

        channel.disconnect();
    } catch(JSchException jschEx) {
        System.out.println("JSch exception during I/O");
        System.out.println(jschEx.getMessage());
    }
}

Вот как выглядит консоль при запуске

пользователь: домен @ узел:/a/b/c> cd ..

CD..

пользователь: домен @ узел:/a/b> пользователь: домен @ узел:/a/b>

Как видите, есть проблемы:

  • "CD.." печатается на линии к консоли отдельно
  • Пустая строка появляется после "CD.."
  • Строка "user:domain@node:/a/b>" печатается дважды.

Кто-нибудь знает, как я могу удалить эти 3 элемента из отображения в консоли? Желаемый вывод

пользователь: домен @ узел:/a/b/c> cd ..

Пользователь: домен @ узел: / а / б>

1 ответ

Это все последствия "оболочки" канала.

Вы запускаете интерактивный сеанс со всеми модными вещами, которые нравятся пользователям.

Канал "оболочка" не предназначен для автоматизации.

Вы можете удалить некоторые из них, позвонив channel.setPty(false) до channel.connect(),


Хотя вам лучше использовать канал "exec".

Это может работать:

( echo username & echo password & echo hostname ) | command

Смежные вопросы:

Другие вопросы по тегам