Я очень новичок в JSch.Я пытаюсь выполнить несколько команд на сервере, которые я получаю в качестве входных данных от какой-либо другой системы.Я беру эти команды и передаю их в качестве параметра в java-метод.Например:
public String readFileFromPath(String server, String path,
String fileName);
Здесь сначала мы должны перейти к «пути», затем нам нужно прочитать какой-то конкретный контент из файла, присутствующего на пути.Чтобы реализовать это, я сделал следующее:
Session session = sshOperations.getSessionWithTimeout(USER,server,SSHPORT,1000);
Channel shellChannel = sshOperations.getShellChannel(session);
InputStream in = new PipedInputStream();
PipedOutputStream consoleInput = new PipedOutputStream((PipedInputStream) in);
OutputStream out = new PipedOutputStream();
BufferedReader consoleOutput = new BufferedReader(new InputStreamReader(new PipedInputStream((PipedOutputStream) out)));
shellChannel.setInputStream(in);
shellChannel.setOutputStream(out);
shellChannel.connect(1000);
consoleInput.write(("cd "+path).getBytes());
// first While
while ((line = consoleOutput.readLine()) != null)
{
System.out.println("check "+ line);
}
// execute second command
consoleInput.write("cat some.properties".getBytes());
// second While
while ((line = consoleOutput.readLine()) != null)
{
System.out.println("check "+ line);
}
Теперь я знаю, что когда я подключаюсь к этому серверу, я получаю текст приветствия:
"You are using <serverName> server.
Please contact admin for any issues"
Итак, после первого цикла while мойВыполнена команда cd, и она напечатает сообщение, упомянутое выше.Но после этого он ожидает большего вывода из выходного потока (он застрял в этой точке), и выходной поток не может произвести ничего, пока я не выполню другую команду.
Каким-то образом я хочу выйти из первогоЦикл while без записи логики для использования 2-х строк (фиксированных).Что касается следующей команды, я не буду знать, сколько строк будет выводиться в потоке.
Пожалуйста, предложите логику для получения желаемого результата, т.е. я выполнил команду, и некоторая логика потребляет ее, а затем я получаювыполнить другую команду и так далее до тех пор, пока не будут выполнены все команды, поступившие в качестве параметра.
Есть ли другой способ добиться того же самого?
Спасибо