Объединение вывода двух параллельных программ с помощью bash

Я хочу записать вывод двух параллельных программ (хвосты в файлах журнала) в один поток вывода в 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, но я хотел бы знать, есть ли способ обойти это.

Если кто-нибудь сможет объяснить, почему это не работает, я был бы очень счастлив.

15
задан Marius Olsthoorn 31 January 2012 в 13:26
поделиться