Jak przekierować stdout + stderr do jednego pliku, podczas gdy strumienie są oddzielone?

Przekierowanie stdout + stderr, tak że oba zapisywane są do pliku, podczas gdy nadal wysyłane są na standardowe wyjście, jest wystarczająco proste:

cmd 2>&1 | tee output_file

Ale teraz oba stdout / stderr z cmd nadchodzą na stdout. Chciałbym napisać stdout + stderr do tego samego pliku (tak więc porządkowanie jest zachowane przy założeniu, że cmd jest pojedynczym wątkiem), ale nadal można je również oddzielnie przekierować, coś takiego:

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

Zatem kombinacja wyjścia zawiera oba z zachowaną kolejnością, ale polecenie-oczekiwanie-stdout dostaje tylko stdout, a polecenie-oczekiwanie-stderr pobiera tylko stderr. Zasadniczo chcę zalogować stdout + stderr, jednocześnie pozwalając, aby stdout i stderr były oddzielnie przekierowywane i potokowane. Problem z podejściem do trójnika polega na tym, że łączy je razem. Czy można to zrobić w bash / zsh?

questionAnswers(5)

yourAnswerToTheQuestion