Запуск сценария оболочки Unix из кода Java и работа с подсказками - PullRequest
0 голосов
/ 18 января 2019

У меня есть Java-программа, которая выполняет команды оболочки. Все работает нормально, так как я могу видеть, работают ли команды или есть ошибка ... за исключением случаев, когда команды предлагают пользователю ввести дополнительную информацию.

Например, когда я запускаю команду ssh-keygen -t rsa -b 4096 -f my_key_name, программа будет вращаться вечно и не вернется к пользователю, так как она ждет от меня ввода пароля. Теперь я знаю, что могу ввести -P "", чтобы пропустить добавление пароля, но моя проблема в других командах, которые запрашивают информацию.

Я просто хочу знать, как я мог бы вернуть текст приглашения пользователю (так как мне не нужно, чтобы пользователь мог ввести его ответ на приглашение).

RunCommandDto runCommandDto = new RunCommandDto();
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec('ssh-keygen -t rsa -b 4096 -f my_key_name');

BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));

String output = "";

while ((String sInOut = stdInput.readLine()) != null) {
    output += sInOut + "\n";
}

while ((String sErr = stdError.readLine()) != null) {
     output += sErr + "\n";
}

1 Ответ

0 голосов
/ 18 января 2019

Доступ к stdin exec'd процесса возможен через proc.getOutputStream() Все, что вы отправляете через этот поток, будет доставлено процессу ssh-keygen через stdin .

Конечно, если вы не отправите ожидаемый ввод, процесс может просто вернуть какое-то предупреждающее сообщение и продолжить ожидание. То, что вам нужно отправить, будет зависеть от того, на какой процесс вы его отправляете.

Также: вы обрабатываете вывод ssh-keygen, читая InputStream и Error Stream. Тем не менее, вы, вероятно, захотите сделать это в отдельном потоке - как у вас сейчас, если процесс записывает слишком много в stderr перед записью в stdout, он может зависнуть из-за полного буфера ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...