Bash capture toute erreur comme -e mais ne quitte pas, fait autre chose

Je veux mettre un drapeau dans un script shell (bash) afin que si quelque chose returnne non-zéro, un drapeau est défini (c'est-à-dire définir une variable comme les errors="True" ).

Jusqu'à présent, j'ai pensé à appeler le script avec scriptname.sh 2>Error.log et ensuite faire quelque chose comme:

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

Il doit y avoir beaucoup mieux. S'il vous plaît, éclairez-moi.

C'est exactement à quoi sert le trap ERR . Malheureusement, il a les mêmes limitations et inconvénients que set -e . Comme set -e , toute command qui renvoie une valeur non nulle dans une expression conditionnelle triggersra le piège. Voici un exemple de code:

 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"