Eu geralmente coloco algo semelhante ao seguinte no início de cada script (especialmente se ele for executado como um daemon):
#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>log.out 2>&1
# Everything below will go to the file 'log.out':
Explicação:
-
exec 3>&1 4>&2
Salva os descritores de arquivos para que eles possam ser restaurados para o que quer que fossem antes do redirecionamento ou utilizados para gerar a saída para o que quer que fosse antes do redirecionamento a seguir.
-
trap 'exec 2>&4 1>&3' 0 1 2 3
Restaurar descritores de arquivo para sinais específicos. Geralmente não é necessário, pois eles devem ser restaurados quando a sub-shell sair.
-
exec 1>log.out 2>&1
Redirecione
stdout
para o arquivolog.out
e, em seguida, redirecionestderr
parastdout
. Observe que a ordem é importante quando você quer que eles acessem o mesmo arquivo.stdout
deve ser redirecionado antes questderr
seja redirecionado parastdout
.
A partir de então, para ver a saída no console (talvez), você pode simplesmente redirecionar para &3
. Por exemplo,
echo "$(date) : part 1 - start" >&3
irá para onde stdout
foi direcionado, presumivelmente o console, antes de executar a linha 3 acima.