Bash captura qualquer erro como -e mas não sai, faz outra coisa

7

Eu quero definir um sinalizador em um script de shell (bash) para que, se algo retornar diferente de zero, um sinalizador seja definido (isto é, defina uma variável como errors="True" ).

Até agora, pensei em chamar o script com scriptname.sh 2>Error.log e fazer algo como:

 if $(wc -l error.log) != 0; then
   errors="True"

Tem que haver uma maneira muito melhor. Por favor, me ilumine.

    
por Gregg Leventhal 31.10.2013 / 22:31

1 resposta

6

Isso é exatamente para o qual trap ERR é. Infelizmente, tem as mesmas limitações e desvantagens de set -e . Como set -e , qualquer comando que retorne um valor diferente de zero em uma expressão condicional irá disparar o trap. Aqui está um código de exemplo:

error=0
set_error() {
    (( error++ )) 
}

trap set_error ERR
ls askdjasdaj 2>/dev/null
false
false || true # false returns non-zero but is not counted due to the conditional
echo "$error" # outputs "2"
    
por 31.10.2013 / 22:44