Usando exec e tee para redirecionar logs para stdout e um arquivo de log no mesmo tempo [duplicado]

19

Em um script bash, como posso redirecionar todas as saídas padrão para um arquivo de log e tee da saída na tela usando exec ?

log_file="$HOME/logs/install.txt-'date +'%Y-%m-%d_%H-%M-%S''"
[ -f "$log_file" ] || touch "$log_file"
exec 1>> $log_file 2>&1

Esse código redireciona todo o log para o arquivo de log, mas não para a tela.

    
por 4m1nh4j1 21.07.2014 / 10:12

2 respostas

38

Use substituição de processos com & redirecionamento e exec :

exec &> >(tee -a "$log_file")
echo This will be logged to the file and to the screen

$log_file conterá a saída do script e de quaisquer subprocessos, e a saída também será impressa na tela.

>(...) inicia o processo ... e retorna um arquivo que representa sua entrada padrão. exec &> ... redireciona a saída padrão e o erro padrão para ... para o restante do script (use apenas exec > ... apenas para stdout). tee -a acrescenta sua entrada padrão ao arquivo e também o imprime na tela.

    
por 21.07.2014 / 10:19
6
exec >> $log_file 2>&1 && tail $log_file
    
por 21.07.2014 / 10:17

Tags