+
+trapret() {(
+ local retvals="$1"; shift
+ local cmd="$1"; shift
+ for retval in $(echo $retvals); do
+ local trap_$retval=1
+ done
+ "$cmd" "$@" || {
+ local retval="$?"
+ eval "trapped=\${trap_$retval}"
+ [ -n "$trapped" ] || {
+ return $retval
+ }
+ }
+)}