Si vous créez un processus avec Processbuilder ou Runtime en Java, il se peut qu'il se comporte d'une manière qui n'est pas nécessairement la même que celle sous Linux. Si vous créez temporairement un "script bash (script shell)" et que vous l'exécutez, il peut se comporter comme vous le souhaitez.
public void executeCommands() throws IOException {
//Création de fichiers temporaires
File tempScript = createTempScript();
try {
//Exécution du script
ProcessBuilder pb = new ProcessBuilder("bash", tempScript.toString());
//Sortie d'erreur
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
System.out.println(buffer.lines().collect(Collectors.joining("\n")));
}
//Sortie standard
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 {
//Suppression de fichiers temporaires
tempScript.delete();
}
}
public File createTempScript() throws IOException {
//Création de fichiers temporaires
File tempScript = File.createTempFile("script", null);
Writer streamWriter = new OutputStreamWriter(new FileOutputStream(
tempScript));
PrintWriter printWriter = new PrintWriter(streamWriter);
//J'écrirai un script.
printWriter.println("#!/bin/bash");
printWriter.println("cd bin");
printWriter.println("ls");
//Fin d'écriture
printWriter.close();
return tempScript;
}
https://stackoverflow.com/questions/26830617/running-bash-commands-in-java
Recommended Posts