Formata os logs para adicionar algumas linhas somente se houver um erro

1

Estou fazendo uma descoberta para obter alguns arquivos como este e obtendo a saída em um arquivo e erro para um arquivo de log diferente.

find /some_dir -maxdepth 1 -mindepth 1 > outputFile.txt 2>>log.txt;

Existem outros registros também em log.txt . Como posso acrescentar algumas linhas antes e depois dos erros (como o ***** para identificar erros no find) e somente se houver algum erro no comando find.

    
por aamadmi 28.08.2017 / 12:22

2 respostas

1

Você pode fazer uma função como:

function append()
{
if [[ -s /tmp/stderr ]]
then 
     {   echo -e '\nText you want like ***\n' >> log.txt
         cat /tmp/stderr >> log.txt;
         rm /tmp/stderr
     }
fi
}

Em seguida, execute seu comando da seguinte maneira:

$ find /some_dir -maxdepth 1 -mindepth 1 > outputFile.txt 2>/tmp/stderr;
$ append
    
por 28.08.2017 / 13:40
1

o argumento non_existent_dir foi adicionado a find para a geração da mensagem de erro.

Com variável

#!/bin/bash

error=$(find . non_existent_dir 2>&1 > output.txt)
if (($?)); then
     printf "%s\n%s\n%s\n" "message before" "$error" "message after" >> log.txt
fi

Explicação:

  • 2>&1 > output.txt - stderr (número 2) redirecionado para o stdout (número 1) e stdout para o output.txt .

  • $? - o status de saída do comando find . find sai com status 0 se todos os arquivos forem processados com sucesso, maior que 0 se ocorrerem erros.

Sem variável

find . non_existent_dir 2>&1 > output.txt | 
  awk 'NR == 1 {print "start message"}
       {print}
       END {if(NR > 0) print "end message"}' >> log.txt

Explicação:

  1. A parte find é a mesma da variante anterior.
  2. awk part - Se a entrada não tiver nenhuma linha (nenhum erro ocorreu), não imprimirá nada.
    • NR == 1 {print "start message"} - se for a primeira linha, imprima a "mensagem inicial".
    • {print} - basta imprimir todas as linhas de entrada.
    • END {if(NR > 0) print "end message"} - verifica no final da execução, obteve alguma entrada de linhas ( NR - número de registros)? Em caso afirmativo, imprima a "mensagem final".
por 28.08.2017 / 15:26

Tags