Resumo de retorno de script dos códigos de saída

1

Eu uso este comando para testar minhas páginas html em busca de erros:

find . -iname '*html' -type f -print -exec /usr/local/bin/tidy -q -e {} \;

E eu quero obter o código de saída > 0 se algum erro foi encontrado por arrumação.

encontre sempre me retorne 0.

Existe alguma maneira de somar o código de saída de forma organizada e devolvê-lo a partir do find ou qualquer outro script de wrapper?

    
por Korjavin Ivan 15.08.2013 / 15:33

2 respostas

2

Tente isto:

#!/bin/bash

NUM_FAILS=0

for FILE in $(find . -iname '*.html' -type f -print); do
  /usr/local/bin/tidy -q -e ${FILE}

  if [ $? -ne 0 ]; then
    ((NUM_FAILS++))
  fi

done

if [ ${NUM_FAILS} -gt 0 ]; then
  echo -e "There were ${NUM_FAILS} failed files."
  exit 1
fi

exit 0

Explicação: Você desejará percorrer os resultados do comando find , executar tidy e, em seguida, incrementar um contador se um erro for encontrado (suponho que tidy gerará um código de retorno diferente de zero no erro).

Depois de percorrer os arquivos, se houver algum erro, você poderá exit 1 , e é sempre recomendável explicitamente exit 0 se as coisas forem concluídas com êxito.

    
por 15.08.2013 / 16:01
4

Você pode tentar algo assim:

find . -iname '*html' -type f \( -exec tidy -q -e {} \; -o -print \)

Isso imprimiria apenas nomes de arquivo para os quais tidy saía com um código de erro. Você pode usar -fprint para coletar os nomes de arquivos em um arquivo:

find . -iname '*html' -type f \( -exec tidy -q -e {} \; -o -fprint files_with_errors \)

Essas construções aproveitam o fato de que -exec é uma expressão booleana que retorna true ou false dependendo do sucesso do comando; o -o flag é um booleano OR , portanto, lê-se:

localize todas as entradas que correspondem a *html AND que são arquivos AND (para os quais o tidy retorna true OU imprime o nome do arquivo)

    
por 15.08.2013 / 16:06