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