Wenn Sie einen Prozess mit Processbuilder oder Runtime in Java erstellen, verhält er sich möglicherweise anders als unter Linux. Wenn Sie vorübergehend ein "Bash-Skript (Shell-Skript)" erstellen und ausführen, verhält es sich möglicherweise wie gewünscht.
public void executeCommands() throws IOException {
//Temporäre Dateierstellung
File tempScript = createTempScript();
try {
//Skriptausführung
ProcessBuilder pb = new ProcessBuilder("bash", tempScript.toString());
//Fehlerausgabe
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
System.out.println(buffer.lines().collect(Collectors.joining("\n")));
}
//Standardausgabe
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
System.out.println(buffer.lines().collect(Collectors.joining("\n")));
}
Process process = pb.start();
process.waitFor();
} finally {
//Temporäres Löschen von Dateien
tempScript.delete();
}
}
public File createTempScript() throws IOException {
//Temporäre Dateierstellung
File tempScript = File.createTempFile("script", null);
Writer streamWriter = new OutputStreamWriter(new FileOutputStream(
tempScript));
PrintWriter printWriter = new PrintWriter(streamWriter);
//Ich werde ein Skript schreiben.
printWriter.println("#!/bin/bash");
printWriter.println("cd bin");
printWriter.println("ls");
//Ende des Schreibens
printWriter.close();
return tempScript;
}
https://stackoverflow.com/questions/26830617/running-bash-commands-in-java
Recommended Posts