Bash captura cualquier error como -e pero no sale, haz otra cosa

Quiero establecer un indicador en un script de shell (bash) de modo que si algo devuelve un valor distinto de cero, se establece un indicador (es decir, establece una variable como errors="True" ).

Hasta ahora, he pensado en llamar al script con scriptname.sh 2>Error.log y luego hacer algo como:

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

Tiene que haber una forma mucho mejor. Por favor iluminame.

Esto es exactamente para lo que es la trap ERR . Desafortunadamente, tiene las mismas limitaciones y desventajas que el set -e . Como set -e , cualquier command que devuelva un valor distinto de cero en una expresión condicional disparará la trampa. Aquí hay un código de ejemplo:

 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"