On 9/14/10 3:44 AM, Jochen Dekeyser wrote:
> Bash Version: 4.1
> Patch Level: 7
> Release Status: release
>
> Description:
> Run this script:
>
> #!/bin/bash
>
> trap 'echo "trap error on ${LINENO}"' ERR
> trap 'echo "trap exit on ${LINENO}"' EXIT
>
> /bin/false
>
> exit 0
>
> You should get (and this is also the result you get in Bash 3.2):
>
> trap error on 6
> trap exit on 8
>
> But you get:
>
> trap error on 6
> trap exit on 1
This was changed in bash-4.0 with the rationale that traps, except the
special bash traps, should be run in a semi-independent environment with
a private value of $LINENO. As a result, $LINENO gets reset before
running the trap.
I guess you could make a case to not reset $LINENO for the exit trap
due to this sentence in Posix (though $LINENO is not Posix):
"The environment in which the shell executes a trap on EXIT shall be
identical to the environment immediately after the last command executed
before the trap on EXIT was taken."
I'll have to think about it.
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU [email protected] http://cnswww.cns.cwru.edu/~chet/