Я хочу, чтобы моя программа Java выполняла скрипт bash и возвращала результат обратно на Java. Трюк заключается в том, что мой скрипт запускает какой-то «интерактивный сеанс», и я полагаю, поэтому мое приложение Java зависает (вводит бесконечный цикл, я полагаю). Вот код, который я использую для выполнения сценария, для этого я использую ProcessBuilder. Я также пробовалКак выполнить скрипт bash из java-программы
Runtime.getRuntime().exec(PathToScript);
Он также не работает.
public class test1 {
public static void main(String a[]) throws InterruptedException, IOException {
List<String> commands = new ArrayList<String>();
List<String> commands1 = new ArrayList<String>();
commands.add("/Path/To/Script/skrypt3.sh");
commands.add("> /dev/ttys002");
ProcessBuilder pb = new ProcessBuilder(commands);
pb.redirectErrorStream(true);
try {
Process prs = pb.start();
Thread inThread = new Thread(new In(prs.getInputStream()));
inThread.start();
Thread.sleep(1000);
OutputStream writeTo = prs.getOutputStream();
writeTo.write("oops\n".getBytes());
writeTo.flush();
writeTo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class In implements Runnable {
private InputStream is;
public In(InputStream is) {
this.is = is;
}
@Override
public void run() {
try {
byte[] b = new byte[1024];
int size = 0;
while ((size = is.read(b)) != -1) {
System.out.println(new String(b));
}
is.close();
} catch (IOException ex) {
Logger.getLogger(In.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
И вот сценарий, который я пытаюсь выполнить. Он работает как шарм, когда я запускаю его непосредственно с терминала.
#!/bin/bash
drozer console connect <<EOF> /dev/ttys002
permissions
run app.package.info -a com.mwr.example.sieve
exit
EOF
Вы пытались добавить 'bash' или'/bin/bash' перед файлом сценария (либо в ProcessBuilder, либо в Runtime)? – fedterzi
Я просто пробовал, без результатов. Проблема заключается в том, что он выдает исключение «команда не найдена». Я знаю, что это мои пользовательские команды, но почему Java должен обрабатывать каждую команду, которая находится в скрипте. Давайте просто запустим это в терминале. Есть ли способ сделать это? – DanoPlurana