Вы хотите использовать ожидания встроенной команды.
ожидание [п ...]
Wait для каждого указанного процесса и возвращает статус завершения. Каждый n может быть идентификатором процесса или спецификацией задания; если задана спецификация задания, ожидаются все процессы в конвейере заданий. Если n не задано, все текущие активные дочерние процессы ждут, а статус возврата равен нулю. Если n указывает несуществующий процесс или задание, статус возврата равен 127. В противном случае статус возврата - это статус выхода для последнего процесса или ожидаемого задания.
Вы можете указать свои рабочие места, как %1
, %2
...:
wait %1 %2 %3 ...
, но до тех пор, как у вас нет других дочерних процессов, вы можете просто использовать его без аргументов; он будет затем ждать все дочерние процессы, чтобы закончить:
for ...; do
...
done
wait
echo "All done!"
Ваш отдельный вопрос, как сохранить только разные выходы, немного сложнее. Что именно вы имеете в виду - отличное от чего? Если у вас есть базовый уровень, вы можете сделать это:
for ...; do
if diff -q $this_output $base_output; then
# files are identical
rm $this_output
fi
done
Если вы хотите сохранить все уникальные выходы, алгоритм немного более сложным, конечно, но вы можете все еще использовать diff -q
для проверки идентичных выхода.
Как кто-то указал в теперь удаленном ответе, 'j' должен быть' i'. Также 'output- $ N' будет переписывать один и тот же файл« output-10 »с каждым тестом. Я уверен, что вы хотите 'output- $ i', поэтому у вас есть десять разных выходных файлов. –