Aqui está um exemplo de como executar um script bat / cmd do bash do Unix ou do Windows a partir de Java. Os argumentos podem ser transmitidos no script e a saída recebida do script. O método aceita um número arbitrário 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);
}
}
Ao executar no Unix / Linux, o caminho deve ser semelhante ao Unix (com '/' como separador), ao executar no Windows - use '\'. Hier é um exemplo de um script bash (test.sh) que recebe um número arbitrário de argumentos e dobra todos os argumentos:
#!/bin/bash
counter=0
while [ $# -gt 0 ]
do
echo argument $((counter +=1)): $1
echo doubling argument $((counter)): $(($1+$1))
shift
done
Ao ligar
runScript("path_to_script/test.sh", "1", "2")
no Unix / Linux, a saída é:
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 é um script cmd simples do Windows test.cmd que conta o número de argumentos de entrada:
@echo off
set a=0
for %%x in (%*) do Set /A a+=1
echo %a% arguments received
Ao chamar o script no Windows
runScript("path_to_script\\test.cmd", "1", "2", "3")
A saída é
Received from script: 3 arguments received