Member 13808728 Ответов: 1

Нужно запустить команду внутренней оболочки из кода java


При запуске ниже упомянутого кода в windows он работает, если мы передаем команду date, а затем передаем параметр. Но для FTP он не может поставить следующую команду, так как он идет в приглашение FTP, и процесс просто ждет там. Мне нужен способ передать другую команду на том же экземпляре среды выполнения.
===================================
импорт Java.Ио.Командой bufferedreader;
импорт java.io.BufferedWriter;
импорт Java.Ио.Исключение IOException;
импорт java.io.InputStreamReader;
импорт Java.Ио.Звено outputstreamwriter;

открытый класс и появляться {

публичный статический пустота главный(строка[] аргументы) {
int exitValue = -1;
String command = "cmd /c ftp";//"cmd /c дата";//
Строку = "пока"; //"05-01-2018";//
байт[] b = null;
пробовать {
Процесс Процесс = время выполнения.getRuntime().метод exec(команда);

BufferedWriter writer = новый BufferedWriter(
новый OutputStreamWriter(process.getOutputStream()));
writer.write("помогите");
писатель.промывать();

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));

System.out.println("после BufferedReader");
Строка errorline = "";
while ((errorline = stdError.readLine()) != null) {
Системы.из.код println(свойства errorline);
}

System.out.println("после проверки ошибки");
Строка строка = "";
в то время как ((строка = читатель.с readline()) != нуль) {
System.out.println(строка);
}

System.out.println("после некоторого времени чтения");
читатель.рядом();
stdError.рядом();
System.out.println("перед ожиданием");
exitValue = process.waitFor();
System.out.println("после ожидания");
if (exitValue != 0) {
System.out.println("ненормальное завершение процесса");
}
System.out.println("закончено ОСНОВНОЕ Выполнение...");
} catch (IOException | InterruptedException e) {
е.печатные();
}

}

}
==================================
Мне нужно войти в Kerberos с помощью keytab path, а затем появится приглашение Kerberos, где нужно передать команду Kerberos и после успешного выполнения нужно выйти из приглашения Kerberos.

Таким образом, 1-й поместит команду в подсказку оболочки bash, которая принесет подсказку Kerberos.
Затем выполните команду Kerberos.
Следующая команда, чтобы выйти из командной строки Kerberos.

То же самое происходит и с FTP. Не удалось найти ни одного пакета java для обработки этого сценария. Уже пробовал ChannelExec и ProcessBuilder, но они не работают для второй внутренней командной строки.

Что я уже пробовал:

Я пробовал вышеупомянутый код, который работал с простой командой и параметром, но не работал там, где первая команда переходит во внутреннюю строку (например, FTP-строка или Kerberos-строка), а затем следующая команда или параметр не работают.

1 Ответов

Рейтинг:
0

Richard MacCutchan

Поместите все ваши команды в текстовый файл, а затем используйте -s возможность ввода их в ftp.