Hier ist ein Beispiel, wie Sie ein Unix-Bash- oder Windows-Bat / Cmd-Skript von Java aus ausführen. Argumente können an das Skript übergeben und vom Skript empfangen werden. Die Methode akzeptiert eine beliebige Anzahl von Argumenten.
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);
}
}
Unter Unix / Linux muss der Pfad Unix-ähnlich sein (mit '/' als Trennzeichen), unter Windows '\' verwenden. Hier ist ein Beispiel für ein Bash-Skript (test.sh), das eine beliebige Anzahl von Argumenten empfängt und jedes Argument verdoppelt:
#!/bin/bash
counter=0
while [ $# -gt 0 ]
do
echo argument $((counter +=1)): $1
echo doubling argument $((counter)): $(($1+$1))
shift
done
Beim Anruf
runScript("path_to_script/test.sh", "1", "2")
Unter Unix / Linux lautet die Ausgabe:
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 ist ein einfaches cmd Windows-Skript test.cmd, das die Anzahl der Eingabeargumente zählt:
@echo off
set a=0
for %%x in (%*) do Set /A a+=1
echo %a% arguments received
Beim Aufrufen des Skripts unter Windows
runScript("path_to_script\\test.cmd", "1", "2", "3")
Die Ausgabe ist
Received from script: 3 arguments received