Add (collect) exit codes in bash

bash, exit-code, scripting, shell

Solution

You might want to take a look at the `trap` builtin to see if it would be helpful:

help trap

or

man bash

you can set a trap for errors like this:

#!/bin/bash

AllowedError=5

SomeErrorHandler () {
    (( errcount++ ))       # or (( errcount += $? ))
    if  (( errcount > $AllowedError ))
    then
        echo "Too many errors"
        exit $errcount
    fi
}

trap SomeErrorHandler ERR

for i in {1..6}
do
    false
    echo "Reached $i"     # "Reached 6" is never printed
done

echo "completed"          # this is never printed

If you count the errors (and only when they are errors) like this instead of using "`$?`", then you don't have to worry about return values that are other than zero or one. A single return value of 127, for example, would throw you over your threshold immediately. You can also register `trap`s for other signals in addition to `ERR`.

Problem

I need to depend on few separate executions in a script and don't want to bundle them all in an ugly 'if' statement. I would like to take the exit code '$?' of each execution and add it; at the end, if this value is over a threshold - I would like to execute a command. Pseudo code: ``` ALLOWEDERROR=5 run_something RESULT=$? ..other things.. run_something_else RESULT=$RESULT + $? if [ $RESULT -gt ALLOWEDERROR ] then echo "Too many errors" fi ``` Issue: Even though the Internet claims otherwise, bash refuses to treat the RESULT and $? as integer. What is the correct syntax? Thanks.

Original source