Add (collect) exit codes in bash

前端 未结 7 912
执念已碎
执念已碎 2021-02-08 02:28

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 executi

7条回答
  •  终归单人心
    2021-02-08 03:11

    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 traps for other signals in addition to ERR.

提交回复
热议问题