Take this script
#!/bin/sh
fd ()
{
echo Hello world
exit
}
trap fd EXIT INT
for g in {1..5}
do
echo foo
sleep 1
done
I would like fd
to fire once, either from Control-C or if the script exits normally. However if you hit Control-C it will run twice. How can I fix this?
Do cascading traps.
exit 127
will run theEXIT
trap and set the exit code to 127, so you can sayI remember learning this from other people's scripts after struggling with various workarounds to your problem for several years. After that, I have noticed that some tutorials do explain this technique. But it is not documented clearly in e.g. the Bash manual page IMHO. (Or it wasn't when I needed it. Maybe some things don't change in 15 years ... :-)
what about in redefining trap default?