В написанной мной функции 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
}