Перенаправление stdout + stderr, так что оба записываются в файл при выводе на stdout достаточно просто:
cmd 2>&1 | tee output_file
Но теперь и stdout/stderr из cmd идут на stdout. Я хотел бы написать stdout + stderr в один и тот же файл (так что упорядочение сохраняется, если cmd однопоточно), но затем все же можно также перенаправить их отдельно, примерно так:
some_magic_tee_variant combined_output cmd > >(command-expecting-stdout) 2> >(command-expecting-stderr)
Итак, объединенный_output содержит оба с сохраненным порядком, но команда-expect-stdout получает только stdout, а команда-expecting-stderr получает только stderr. В принципе, я хочу записывать stdout + stderr, но при этом stdout и stderr будут отдельно перенаправлены и переданы по каналам. Проблема с тройным подходом заключается в том, что он объединяет их вместе. Есть ли способ сделать это в bash/zsh?