Как правило, большинство API Java S SH оставляют за разработчиком возможность разобраться в сложностях выполнения нескольких команд в оболочке. Это сложная проблема, потому что S SH не дает никаких указаний о том, где команды начинаются и заканчиваются в оболочке; протокол предоставляет только поток данных, который является необработанным выводом оболочки.
Я смиренно хотел бы представить мой проект Maverick Synergy . API с открытым исходным кодом (LGPL), который предоставляет интерфейс для интерактивных оболочек. Я задокументировал параметры для интерактивных команд в статье .
. Вот очень простой пример c, класс ExpectShell позволяет вам выполнять несколько команд, каждый раз возвращая ShellProcess, который инкапсулирует вывод команды. Вы можете использовать ShellProcess InputStream для чтения вывода, он вернет EOF после выполнения команды.
Вы также можете использовать ShellProcessController для взаимодействия с командой, как показано в этом примере.
SshClient ssh = new SshClient("localhost", 22, "lee", "xxxxxx".toCharArray());
ssh.runTask(new ShellTask(ssh) {
protected void onOpenSession(SessionChannelNG session)
throws IOException, SshException, ShellTimeoutException {
ExpectShell shell = new ExpectShell(this);
// Execute the first command
ShellProcess process = shell.executeCommand("ls -l");
process.drain();
String output = process.getCommandOutput();
// After processing output execute another
ShellProcessController controller =
new ShellProcessController(
shell.executeCommand("rm -i file.txt"));
if(controller.expect("remove")) {
controller.typeAndReturn("y");
}
controller.getProcess().drain();
}
});
ssh.disconnect();