Я использую библиотеку JSch -SSH выполнить команду в канале «оболочка», но не смогли найти способ сделать 2 вещи: -Как получить JSch вывод команды оболочки в строках
1) Как найти, полностью ли выполнена команда в удаленном окне unix?
2) Как захватить вывод команды в String вместо того, чтобы печатать его на консоли System.out?
Ниже мой фрагмент кода, который прекрасно работает для отображения вывода команды оболочки на System.out
Примечание: Я не хочу использовать «EXEC» канал, как он запускает новый процесс для каждой команды и делает не помнят переменные «сессии», которые были экспортированы. Я должен использовать канал «shell».
Ниже приведен фрагмент кода. Любая помощь приветствуется. Спасибо за ваше время.
try{
String commandToRun = "ls /tmp/*.log \n";
if(channel.isClosed())
channel=session.openChannel("shell");
byte[] bytes = commandToRun.getBytes();
ByteArrayInputStream bais=new ByteArrayInputStream(bytes);
channel.setInputStream(bais);
InputStream ins=channel.getInputStream();
channel.connect();
channel.setOutputStream(System.out);//This prints on console. Need 2 capture in String somehow?
//in-efficient way to allow command to execute completely on remote Unix machine
//DO NOT know a better way, to know when command is executed completely
Thread.sleep(5000L);
}
catch(Exception e){
System.out.println("Exception in executeCommand() --->"+ e.getMessage());
e.printStackTrace();
}
http://stackoverflow.com/a/25845360/1917804 –
Вы вообще не должны использовать канал «оболочки», чтобы автоматизировать выполнение команды. Вместо этого используйте канал «exec». См. [Выполнение списка команд из ArrayList с использованием JSch exec в Java] (http://stackoverflow.com/q/34825155/850848). Если вы используете канал «shell», вы рано или поздно попадаете в неприятности.См. Один пример возможных проблем из многих, см. [Проблема JSch - Не удается получить полный вывод команды] (http://stackoverflow.com/q/35502600/850848) –