[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [[ and set -E vs trap ERR
From: |
Chet Ramey |
Subject: |
Re: [[ and set -E vs trap ERR |
Date: |
Thu, 19 Nov 2009 21:56:22 -0500 |
User-agent: |
Thunderbird 2.0.0.23 (Macintosh/20090812) |
Isaac Good wrote:
> Configuration Information [Automatically generated, do not change]:
> Machine: i686
> OS: linux-gnu
> Compiler: gcc
> Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='i686'
> -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='i686-pc-linux-gnu'
> -DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' - DPACKAGE='bash'
> -DSHELL -DHAVE_CONFIG_H -I. -I. -I./include -I./lib -march=i686
> -mtune=generic -O2 -pipe
> uname output: Linux arch 2.6.31-ARCH #1 SMP PREEMPT Fri Oct 23 11:12:58 CEST
> 2009 i686 Pentium III (Katmai) GenuineIntel GNU/Linux
> Machine Type: i686-pc-linux-gnu
>
> Bash Version: 4.0
> Patch Level: 35
> Release Status: release
>
> cat <<-EOF >test
> #!/bin/bash -e
> set -E
> trap 'echo >&2 "error"' ERR
>
> echo TEST1
> if [ $(false) ] ; then
> echo 1
> fi
>
> echo TEST2
> if [[ $(false) ]] ; then
> echo 1
> fi
> EOF
>
> Expected output:
> TEST1
> TEST2
>
> Actual output:
> TEST1
> TEST2
> error
>
> The [[ masks the fact that an 'if' is running - but only in regards to the
> trap. bash does not exit on this error but the trap is triggered.
> [ works fine.
> With set -E, the trap is inherited by command substitution, but the fact that
> the trap is suppressed is not.
>
> <\amethyst> but the manpage says the ERR trap is avoided under "the same
> conditions obeyed by the errexit option", so at least the documentation is in
> error if nothing else
In bash-4.0, the conditional command does not honor the set -e option,
and as a result, doesn't pay attention to set -E either. The [[ and
(( commands will honor set -e in bash-4.1.
Chet
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU chet@case.edu http://cnswww.cns.cwru.edu/~chet/