Não há "STDIN de A" útil neste cenário. O STDIN é sempre o da sua aplicação. a, b e c escrevem para seu STDOUT, os parênteses os colocam juntos e o pipe conecta o resultado ao STDIN de yourapp. Onde, sim, todos aqueles STDOUTs podem entrar em conflito (um após o outro, não entrelaçados).
( a ; b; c ) | yourapp
ou
( a && b && c ) | yourapp
Não está claro se você tem a, b e c dentro de um script de shell ("script de shell do aplicativo") e se é o mesmo script para todos. Se não for, os scripts são seus "aplicativos" e você está no cenário acima. Se for, você deve ter algo como
while ...; do
read something
a
b
c
done
No cenário acima, o "read" lerá o STDIN comum do aplicativo externo, novamente em ordem, possivelmente bloqueando se não houver nada para ler, mas não vejo como A pode empurrar qualquer coisa para lá.
Não posso ter certeza, mas suspeito que isso possa ser um caso em que canais nomeados ou corretores de mensagens podem ser úteis.