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