Я хочу захватить вывод двух параллельных программ (хвосты на лог файлах) в один выходной поток в bash.
Я использовал эту примерную программу для тестирования:
function foo { for i in $(seq 1 10); do echo "program $*"; sleep 1; done }
Теперь работает отлично
(foo bar & foo baz &) | tee /tmp/output
но как только я добавлю дополнительную трубку в микс, она больше не работает:
(foo bar | grep bar & foo baz &) | tee /tmp/output # does't work
Выход становится последовательным. Я мог бы сделать отдельную программу, которая включает grep, но я хотел бы знать, есть ли способ обойти это.
Если кто-то может объяснить, почему это не работает, я был бы очень счастлив.