Estou assumindo que isso deve ser feito em um script? Se assim for, isso deve fazer o que você quer, eu acho. stdout
será enviado apenas para out.txt
. stderr
será enviado para o console e para err.txt
#!/bin/bash
exec 3> >(tee ./err.txt)
exec 4>./out.txt
exec >&4 2>&3
echo "I'm normal text!" # only in out.txt
echo "I'm an error!" >&2 # in err.txt and on console
Edit: Estou perturbadoramente satisfeito comigo mesmo por este pequeno roteiro, e não sei bem por que.
Editar 2: Para escrever os dois fluxos no mesmo arquivo, basta usar o mesmo nome de arquivo nos dois locais. Em teoria, isso raramente causaria uma perda de ordenação entre stdout e stderr; na prática, é perto o suficiente. (Veja meu comentário divagante abaixo para mais.)