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?