Я пытаюсь прочитать stdout
из моего простого сценария Linux.
test.sh
:
#!/bin/bash
echo "I am waiting"
sleep 2s
exit 0
ShellScriptExecutorTest.java
выглядит так:
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class ShellScriptExecutorTest {
public static void main(String[] args) {
try {
ProcessBuilder processBuilder = new ProcessBuilder("sudo", "bash", "./test.sh");
processBuilder.directory(new File("/home/"));
processBuilder.inheritIO();
Process process = processBuilder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println("--> " + line);
}
int exitValue = process.waitFor();
System.err.println("exitValue: " + exitValue);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Если я выполню приведенный выше код, я получу:
[root@localhost home]# javac ShellScriptExecutorTest.java
[root@localhost home]# java ShellScriptExecutorTest
I am waiting
exitValue: 0
Итак, очевидно, что BufferedReader
ничего не «прочитал», иначе он записал
--> I am waiting
на консоли.
Можете ли вы выяснить мою ошибку?
Большое спасибо за вашу помощь!