Один хороший вариант - переместить цикл в код Java, как предлагали другие.
Альтернативой, и я думаю, что что-то, что было бы традиционным подходом Unix, было бы изменить сценарий оболочкицикл для вывода этих аргументов в стандартный вывод и передачи этих выходных данных в ваш скрипт, который затем будет читать их из стандартного ввода.
Итак, если вы в настоящий момент делаете:
for i in a b c d e
do
java -jar myprogram.jar foo.$i bar.$i baz.$i qux.$i 1 2 3
done
Выможет изменить его на:
for i in a b c d e
do
echo foo.$i bar.$i baz.$i qux.$i 1 2 3
done | java -jar myprogram.jar
Если ваш java-код изменится на что-то вроде:
public static void main(String... args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) {
String[] words = line.split(" "); // this could be done more robustly
String arg1 = words[0];
String arg2 = words[1];
String arg3 = words[2];
String arg4 = words[3];
int arg5 = Integer.parseInt(words[4]);
int arg6 = Integer.parseInt(words[5]);
int arg7 = Integer.parseInt(words[6]);
// then carry on as before
}
}
Это проще, чем использовать сокет.Это также более безопасно, потому что только ваш скрипт имеет доступ к стандартному вводу подпроцесса Java.