Hier ist ein Beispiel, wie man ein Unix-Bash- oder Windows-Bat/cmd-Skript von Java aus ausführt. Es können Argumente an das Skript übergeben und Ausgaben 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);
}
}
Bei der Ausführung unter Unix/Linux muss der Pfad Unix-ähnlich sein (mit '/' als Trennzeichen), bei der Ausführung unter Windows ist '\' zu verwenden. Hier ist ein Beispiel für ein Bash-Skript (test.sh), das eine beliebige Anzahl von Argumenten erhält 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
Bei einem 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 Aufruf des Skripts unter Windows
runScript("path_to_script\\test.cmd", "1", "2", "3")
Die Ausgabe lautet
Received from script: 3 arguments received