Devo admitir, não estou completamente certo sobre qual é o seu objetivo ... no entanto, a sincronização correta para o exec -trick deve ser a seguinte (você perdeu apenas um > ):
exec > >(tee -a logfile) 2>&1
Uma demonstração simples:
% cat test #!/bin/bash echo stdout not logged echo stderr not logged >&2 exec > >(tee -a logfile) 2>&1 echo stdout logged echo stderr logged >&2 % bash test stdout not logged stderr not logged % stdout logged stderr logged % cat logfile stdout logged stderr logged %
Você pode ver que exec estraga a saída imprimindo o prompt novamente, quando o script atinge essa linha. Então, por que você simplesmente não registra? stdout , mas não stderr do seu script?
% (echo stdout; echo stderr >&2) | tee logfile stderr stdout % cat logfile stdout