В написанной мной функции bash я запускаю несколько удаленных команд через ssh и запускаю их в отдельных фоновых процессах. Каждый из этих процессов создает множество строк текста, которые объединяются и затем сортируются. Моя проблема в том, что иногда эти строки смешиваются. То есть одна строка начинает печать, и до того, как эта строка завершает печать, другая строка начинает печать на той же строке.
Мой вопрос заключается в том, как проще всего сделать этот вывод на печать атомарным, чтобы отдельные строки не смешивались друг с другом (можно перемежать целые строки - я просто хочу, чтобы столбцы выстроились в линию)? Одна из моих идей заключалась в том, чтобы сохранить вывод для каждого параллельного фонового процесса, а затем объединить их последовательно, но мне не удалось заставить это работать (этот метод должен работать для меня, если я знал, как это правильно делать). Для справки, вот схема типа скрипта, который я пытаюсь написать:
foo() {
(
pids=()
for x in "$@"
do
(
ssh $x 'some-high-latency-command-with-200-lines-of-data-output'
) &
pids+=( $! )
done
for x in "${pids[@]}"
do
wait $x
done
) 2> /dev/null
}