| # test the trap code |
| |
| trap 'echo exiting' 0 |
| trap 'echo aborting' 1 2 3 6 15 |
| |
| # make sure a user-specified subshell runs the exit trap, but does not |
| # inherit the exit trap from a parent shell |
| ( trap 'echo subshell exit' 0; exit 0 ) |
| ( exit 0 ) |
| |
| trap |
| |
| func() |
| { |
| trap 'echo ${FUNCNAME:-$0}[$LINENO] funcdebug' DEBUG |
| echo funcdebug line |
| } |
| |
| trap 'echo [$LINENO] debug' DEBUG |
| echo debug line |
| |
| trap |
| |
| func |
| |
| trap |
| |
| trap 'echo ${FUNCNAME:-$0}[$LINENO] debug' DEBUG |
| func2() |
| { |
| echo func2debug line |
| } |
| declare -ft func2 |
| func2 |
| |
| unset -f func2 |
| |
| trap '' DEBUG |
| |
| trap |
| |
| trap - debug |
| |
| trap |
| |
| trap - HUP |
| trap hup |
| trap '' INT |
| trap '' int |
| |
| trap |
| |
| # exit 0 in exit trap should set exit status |
| ( |
| set -e |
| trap 'exit 0' EXIT |
| false |
| echo bad |
| ) |
| echo $? |
| |
| # hmmm...should this set the handling to SIG_IGN for children, too? |
| trap '' USR2 |
| ./trap1.sub |
| |
| # test ERR trap |
| ./trap2.sub |
| |
| ${THIS_SH} ./trap3.sub |
| |
| # |
| # show that setting a trap on SIGCHLD is not disastrous. |
| # |
| set -o monitor |
| |
| trap 'echo caught a child death' SIGCHLD |
| |
| sleep 7 & sleep 6 & sleep 5 & |
| |
| # this will only catch the first, since there's a trap on SIGCHLD |
| wait |
| |
| trap -p SIGCHLD |
| |
| # Now reset some of the signals the shell handles specially back to |
| # their default values (with or without the SIG prefix) |
| trap - SIGINT QUIT TERM |
| |
| trap |
| |
| trap - SIGCHLD |
| wait |
| |