Bash 4.1 does not set the ERR trap:
$ env -i HOME="$HOME" TERM="$TERM" bash3 <<\!
set -o errexit
set -o errtrace
TRIGGERED_ERR() { return $?; }
trap 'TRIGGERED_ERR' ERR
set -o xtrace
var=$(false) || true
echo $?
var=$(false || true) # only way of not triggering it...
echo $?
!
++ false # Subshell false
+++ TRIGGERED_ERR # Ignores outer "|| true"
+++ return 1
+ var=
+ true
+ echo 0
0 # But the entire command line does
# not set off errexit
++ false
++ true # Predictable second subshell...
+ var=
+ echo 0
0
Before I write a patch, is this bug documented? I could not find it in
the archives.
Is it a bug at all or is it expected behaviour?
According to the man page, it is not:
The ERR trap is not executed if the failed command is part of the command
list immediately following a while or until keyword, part of the test in an
if statement, part of a && or ⎪⎪ list, or if the command's return value is
being inverted via !
Andres P