Redirecionar toda a saída do script bash (de dentro do script) para dois arquivos: um anexado, um reescrito; mas descartar a saída para o console

3

Eu posso redirecionar facilmente a saída padrão e de erro de um script bash para o arquivo, enquanto descarto uma saída para o console com a simples declaração exec :

exec &>>/var/log/backup.log

Mas como eu uso exec para gravar em dois arquivos, acrescentando primeiro e reescrevendo o segundo? Provavelmente alguma mágica de tee deve ser usada. E também alguma maneira de silenciar o console deve ser encontrada.

A razão para isso é um script de backup meu. Quero anexar ao log principal os eventos do backup mais recente e gravar apenas esses eventos no log de backup atual (limpando seu conteúdo anterior), que deve ser reescrito em cada sessão de backup.

    
por TranslucentCloud 30.01.2015 / 09:34

1 resposta

6

Pode ser feito, você precisa de substituição de processo. Redirecione os fluxos para um subprocesso que chame tee e redirecione o restante para o arquivo sobrescrito.

exec &> >(tee -a backup.log > overwritten.log)

Observe que isso substituirá o arquivo apenas uma vez no script inteiro, porque o fluxo permanecerá aberto até o script sair ou outro redirecionamento ser estabelecido.

    
por 30.01.2015 / 09:50