Como logar a saída de uma parte de um script de shell

1

Estou procurando uma solução concisa para registrar a saída de uma parte de um script de shell em um arquivo. Além disso, ainda quero seguir a saída da vida na tela.

Nas páginas man do "bash" (builtin exec , "Substituição do Processo") e tee , eu esperava que a linha a seguir (chamada no início da peça a ser registrada) fosse uma solução :

exec >(tee -a logfile) 2>&1

Infelizmente, isso resulta em erros de permissão (desculpe, saída original em alemão):

$ bash t
t: Zeile 1: /dev/fd/63: Keine Berechtigung
t: Zeile 1: exec: /dev/fd/63: Kann nicht ausführen: Keine Berechtigung

O sistema é baseado no Ubuntu 12.04 LTS.

Como um protocolo faria parte de um script em um arquivo?

(Coletar a peça a ser protocolada em uma função f e usar f | tee -a logfile seria difícil, já que a parte se estende por (partes de) múltiplas funções e eu gostaria de trocar logfile entre). .)

Obrigado antecipadamente.

    
por Carsten Scholtes 12.12.2013 / 00:40

2 respostas

2

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
    
por 13.12.2013 / 22:02
0

Você pode quebrar as linhas que você deseja entrar em parênteses, e então canalizar a saída através do tee:

echo this line isn\'t logged
(
  echo this line is logged!
) | tee log_file
echo this line isn\'t logged
    
por 12.12.2013 / 01:06