Voici un exemple comment exécuter un script Unix bash ou Windows bat / cmd à partir de Java. Les arguments peuvent être passés sur le script et la sortie reçue du script. La méthode accepte un nombre arbitraire d'arguments.
public static void runScript(String path, String... args) {
try {
String[] cmd = new String[args.length + 1];
cmd[0] = path;
int count = 0;
for (String s : args) {
cmd[++count] = args[count - 1];
}
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
try {
process.waitFor();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
while (bufferedReader.ready()) {
System.out.println("Received from script: " + bufferedReader.readLine());
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
System.exit(1);
}
}
Lors de l'exécution sous Unix / Linux, le chemin doit être de type Unix (avec '/' comme séparateur), lors de l'exécution sous Windows - utilisez '\'. Hier est un exemple de script bash (test.sh) qui reçoit un nombre arbitraire d'arguments et double chaque argument:
#!/bin/bash
counter=0
while [ $# -gt 0 ]
do
echo argument $((counter +=1)): $1
echo doubling argument $((counter)): $(($1+$1))
shift
done
Lors de l'appel
runScript("path_to_script/test.sh", "1", "2")
sous Unix / Linux, le résultat est:
Received from script: argument 1: 1
Received from script: doubling argument 1: 2
Received from script: argument 2: 2
Received from script: doubling argument 2: 4
Hier est un simple script Windows cmd test.cmd qui compte le nombre d'arguments d'entrée:
@echo off
set a=0
for %%x in (%*) do Set /A a+=1
echo %a% arguments received
Lors de l'appel du script sous Windows
runScript("path_to_script\\test.cmd", "1", "2", "3")
La sortie est
Received from script: 3 arguments received