Hi
Just a quick query re. the a behavior of trap when called from function,
not sure if it's a bug or inconsistency or intentional.
Basically it seems (without set -o errtrace)
- an ERR trap can be set from within a function when no ERR trap is
currently defined.
- ERR trap can then not be changed or cleared unless cleared from
global scope (ie cannot be cleared within a function).
- With set -o errtrace, the subsequent calls do succeed in changing
the trap, as might be expected.
I'm just puzzled at the fact that I can set the ERR trap within a function
the first time, but not subsequently.
Example script and output below
Thanks
David
Configuration Information [Automatically generated, do not change]:
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64'
-DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-redhat-linux-gnu'
-DCONF_VENDOR='redhat' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL
-DHAVE_CONFIG_H -I. -I. -I./include -I./lib -D_GNU_SOURCE -DRECYCLES_PIDS
-DDEFAULT_PATH_VALUE='/usr/local/bin:/usr/bin' -O2 -g -pipe -Wall
-Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong
--param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic
uname output: Linux oam02.bfs.openwave.com 3.10.0-229.el7.x86_64 #1 SMP Thu Jan
29 18:37:38 EST 2015 x86_64 x86_64 x86_64 GNU/Linux
Machine Type: x86_64-redhat-linux-gnu
Bash Version: 4.2
Patch Level: 46
Release Status: release
Example script and output :
oam02$ cat test.sh
#!/bin/bash
trap_1() {
trap 'echo this is trap 1' ERR
}
trap_off() {
trap '' ERR
}
trap_2() {
trap 'echo this is trap 2' ERR
}
trap_1
trap -p ERR
trap_2
trap -p ERR
trap_off
trap_2
trap -p ERR
trap "" ERR
trap_2
trap -p ERR
oam02$ ./test.sh
trap -- 'echo this is trap 1' ERR
trap -- 'echo this is trap 1' ERR
trap -- 'echo this is trap 1' ERR
trap -- 'echo this is trap 2' ERR