¿Cómo redirigir stdout + stderr a un archivo mientras se mantienen las secuencias separadas?

Redirigir stdout + stderr de modo que ambos se escriban en un archivo mientras se siguen enviando a stdout es bastante simple:

cmd 2>&1 | tee output_file

Pero ahora ambos stdout / stderr de cmd vienen en stdout. Me gustaría escribir stdout + stderr en el mismo archivo (por lo que el orden se conserva suponiendo que cmd es de un solo hilo) pero aún así también podemos redirigirlos por separado, algo como esto:

some_magic_tee_variant combined_output cmd > >(command-expecting-stdout) 2> >(command-expecting-stderr)

Así que combined_output contiene los dos con el orden conservado, pero el comando-expectando-stdout solo obtiene la salida estándar y el comando-esperando-stderr solo obtiene el stderr. Básicamente, quiero registrar stdout + stderr y al mismo tiempo permitir que stdout y stderr se redirijan y canalicen por separado. El problema con el enfoque de tee es que se amontonan juntos. ¿Hay una manera de hacer esto en bash / zsh?

Respuestas a la pregunta(5)

Su respuesta a la pregunta