Вообще в баше «foo ; bar» - последовательное выполнение, а "(foo &) ; bar" - параллельное. Каких-то более кратких языковых конструкций позволяющих скрыть промежуточную some_ref не припомню (и это всё равно будет сахар).
но всё же это не то, но тут моя вина - я не совсем правильно сформулировал задачу
мне нужно чтобы один stdout выводился на экран в первозданном виде (т.е. не прогонялся через переменные или файлы), а другой поток, идентичный первому, уходил в файл или переменную, где с ним будут проделываться определённые манипуляции
я читал ман по башу и пытался сделать через exec, да то ли я тормоз, то ли вообще нельзя, но не получилось
#1. одним куском
REPLY="$(источник | tee $экран )"
#2. по частям
источник | while read
do
echo $REPLY && обрабатывай себе
done >$экран
Твоя задаче - обеспечить, чтобы $экран указывал на экран, и в первом случае не совпадал с stdout. Для чего есть /dev/stderr, /dev/stdin (может не пустить), и /dev/fd/{0,2..много}