Eu sei como redirecionar para um arquivo e usar tee; em um nível básico. então
$ alias outanderr='bash -c "echo stdout >&1; echo stderr >&2"'
# A fake "application" displaying both output and error messages.
$ outanderr 1>file # redirect stdout to a file, display stderr
stderr
$ outanderr 2>file # redirect stderr to a file, display stdout
stdout
$ outanderr 1>file 2>&1 # redirect both to a file, display nothing
$ outanderr | tee file; echo "-- file contents --" && cat file
# redirect stdout to a file, display both (note: order is messed up)
stderr
stdout
-- file contents --
stdout
$ outanderr 2>&1 | tee file; echo "-- file contents --" && cat file
# redirect both to a file, display both
stdout
stderr
-- file contents --
stdout
stderr
A questão é: o que escrever no lugar dos pontos de interrogação para obter a saída abaixo:
$ outanderr ???; echo "-- file contents --" && cat file
# redirect both to a file, display stderr
stderr
-- file contents --
stdout
stderr
Constaints:
- Assumindo festança.
- A ordem deve ser mantida no arquivo.
- O conteúdo do stderr é exibido em tempo real, linha por linha, ou seja, sem buffer.
- Arquivos de script separados podem ser usados.
- Magia pode ser necessária.
outanderrestá apenas um alias que imprime uma linha para stdout e outra para stderr. A idéia (se possível) é criar uma solução genérica que possa funcionar com qualquer programa, sem modificá-los.
outanderrprograma você tem?