Não é totalmente eficiente, mas você pode conseguir isso com pipes nomeados , que você pode criar com mkififo(1)
Para o exemplo na pergunta:
mkfifo /tmp/f
wc -l /tmp/f > /tmp/linecount &
zcat my_data_file.gz \
| tee /tmp/f \
| process_data.py &
wait
rm /tmp/f
Observe o &
anexado ao wc
e ao pipeline; Isso significa que o shell irá empurrar as tarefas para o segundo plano. A chamada para wait
aguarda que todas as tarefas em segundo plano sejam concluídas. Ambos os processos terminarão aproximadamente ao mesmo tempo.
Tenha em atenção que, se um dos seus processos for substancialmente mais lento, poderá abrandar tudo de forma significativa, pois tee
pode bloquear o seu canal stdout ou o pipe nomeado para o qual está a escrever. Editar : Além disso, agora tem mais modos de falha, já que o tee sairá devido a um cano quebrado se o processo secundário falhar.