Ниже приведен пример запуска сценария Unix bash или Windows bat / cmd из Java. Аргументы могут быть переданы в сценарий и выведены из сценария. Метод принимает произвольное количество аргументов.
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);
}
}
При работе в Unix / Linux путь должен быть подобен Unix (с разделителем /) в качестве разделителя, при запуске в Windows - использовать \. Hier - это пример скрипта bash (test.sh), который получает произвольное количество аргументов и удваивает каждый аргумент:
#!/bin/bash
counter=0
while [ $# -gt 0 ]
do
echo argument $((counter +=1)): $1
echo doubling argument $((counter)): $(($1+$1))
shift
done
При звонке
runScript("path_to_script/test.sh", "1", "2")
в Unix / Linux, вывод:
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 - это простой сценарий Windows cmd test.cmd, который считает количество входных аргументов:
@echo off
set a=0
for %%x in (%*) do Set /A a+=1
echo %a% arguments received
При вызове скрипта в Windows
runScript("path_to_script\\test.cmd", "1", "2", "3")
Выход
Received from script: 3 arguments received