Ecco un esempio di come eseguire uno script bash Unix o Windows bat / cmd da Java. Gli argomenti possono essere passati allo script e all'output ricevuto dallo script. Il metodo accetta un numero arbitrario di argomenti.
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);
}
}
Quando si esegue su Unix / Linux, il percorso deve essere simile a Unix (con '/' come separatore), quando si esegue su Windows - usare '\'. Hier è un esempio di uno script bash (test.sh) che riceve un numero arbitrario di argomenti e raddoppia ogni argomento:
#!/bin/bash
counter=0
while [ $# -gt 0 ]
do
echo argument $((counter +=1)): $1
echo doubling argument $((counter)): $(($1+$1))
shift
done
Quando si chiama
runScript("path_to_script/test.sh", "1", "2")
su Unix / Linux, l'output è:
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 è un semplice cmd script di Windows test.cmd che conta il numero di argomenti di input:
@echo off
set a=0
for %%x in (%*) do Set /A a+=1
echo %a% arguments received
Quando si chiama lo script su Windows
runScript("path_to_script\\test.cmd", "1", "2", "3")
L'output è
Received from script: 3 arguments received