Вы захотите использовать встроенную функцию ожидания.
подождите [n ...]
Дождаться каждого указанного процесса и возвращать его статус завершения. Каждый 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
для проверки идентичных выходных данных.