Aquí hay un ejemplo de cómo ejecutar un script Unix bash o Windows bat / cmd desde Java. Se pueden pasar argumentos en el script y la salida recibida del script. El método acepta un número arbitrario de argumentos.
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);
}
}
Cuando se ejecuta en Unix / Linux, la ruta debe ser similar a Unix (con '/' como separador), cuando se ejecuta en Windows: use '\'. Hier es un ejemplo de un script bash (test.sh) que recibe un número arbitrario de argumentos y duplica cada argumento:
#!/bin/bash
counter=0
while [ $# -gt 0 ]
do
echo argument $((counter +=1)): $1
echo doubling argument $((counter)): $(($1+$1))
shift
done
Cuando llame
runScript("path_to_script/test.sh", "1", "2")
en Unix / Linux, el resultado es:
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 es un simple script de Windows cmd test.cmd que cuenta el número de argumentos de entrada:
@echo off
set a=0
for %%x in (%*) do Set /A a+=1
echo %a% arguments received
Al llamar al script en Windows
runScript("path_to_script\\test.cmd", "1", "2", "3")
La salida es
Received from script: 3 arguments received