Re: [PATCHv2 02/11] git-p4: test debug macro
- From
- Pete Wyckoff <pw@padd.com>
- Date
- Dec 18, 2011, 13:50 UTC
- Message-ID
- <20111218135047.GA16487@padd.com>
- In-Reply-To
- <20111218032238.GA6368@elie.hsd1.il.comcast.net>
jrnieder@gmail.com wrote on Sat, 17 Dec 2011 21:26 -0600:
Show 7 quoted lines
> Pete Wyckoff wrote: > > > + # 2 is SIGINT, ash/dash does not know symbolic names > > + trap echo 2 > > 'trap "$cmd" INT' works, and it's even in POSIX. ;) > http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#trap
Nice! But ash/dash handle subshell INT differently. With ash, the entire test exits after the ctrl-C, even if caught by a trap in a subshell. Not so nice. Here's a demonstration.
-----------8<------------- # shell top.sh echo top.sh $SHELL trap.sh echo top.sh: exit status from trap.sh: $? echo top.sh: exiting exit 0 -----------8<-------------
-----------8<------------- # shell trap.sh echo trap.sh trap "echo trap.sh caught INT" INT sleep 3600 trap - INT echo trap.sh: exiting exit 0 -----------8<-------------
Run "bash top.sh". Hit ctrl-c, you'll see:
$ bash top.sh
top.sh
trap.sh
^Ctrap.sh caught INT
trap.sh: exiting
top.sh: exit status from trap.sh: 0
top.sh: exitingSimilarly with "ash top.sh":
$ ash top.sh
top.sh
trap.sh
^Ctrap.sh caught INT
trap.sh: exitingThe top-level script also gets the ctrl-c, but exits on the INT anyway, after reaping its child. I can't find where POSIX says if this is correct or not. It isn't how I want it to work here.
I'll add a comment above debug() to explain that it works in bash but not ash. At least it prints out the P4 environment information needed to debug.
-- Pete