Как перенаправить stdout + stderr в один файл, сохраняя потоки отдельно?

Перенаправление stdout + stderr таким образом, что оба записываются в файл, а вывод на stdout все же достаточно прост:

cmd 2>&1 | tee output_file

Но теперь оба stdout / stderr из cmd приходят на стандартный вывод. Я хотел бы записать stdout + stderr в тот же файл (так что порядок сохраняется, предполагая, что cmd является однопоточным), но затем все еще можно перенаправить их отдельно, что-то вроде этого:

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

Таким образом, комбинированный_отчет содержит оба с сохраненным порядком, но команда-ожидающий-stdout получает только stdout, а команда-ожидающий-stderr получает только stderr. По сути, я хочу войти в stdout + stderr, при этом позволяя stdout и stderr отдельно перенаправляться и передаваться по конвейеру. Проблема с тройным подходом заключается в том, что он объединяет их. Есть ли способ сделать это в bash / zsh?

Ответы на вопрос(5)

Ваш ответ на вопрос