trap 0 in /bin/sh
Eric Gisin
eric at mks.mks.com
Thu Mar 28 16:52:57 AEST 1991
In article <1991Mar27.153352.4421 at robobar.co.uk> ronald at robobar.co.uk (Ronald S H Khoo) writes:
Can someone explain why these two commands give different output ?
Is there some subtlety about the "trap" command that I don't understand ?
$ ( trap 'echo foo' 0 ; true )
$ ( trap 'echo foo' 0 ; : )
foo
There is a bug in the shell.
When the last command in the list is executable (true is, : is not),
the shell tries to be clever and just does exec instead of fork/exec.
Since the shell exec()s instead of exit()s, the EXIT trap is not run.
You can work around it by putting an extra : at the end of the list:
$ ( trap 'echo foo' 0 ; true; : )
foo
I tried this using /bin/sh on SCO Xenix, SCO Unix (orig release) and
GEC UX/63 (SVR2, I think) and SunOS 4.1. Yes, I know they're all System V
/bin/sh, but I don't have a BSD handy to try.
More information about the Comp.unix.sysv386
mailing list