fork download
  1. #!/bin/bash
  2. set -E
  3.  
  4. subs() {
  5. echo "before false1: $LINENO"
  6. false 1
  7. echo "after false1: $LINENO"
  8. }
  9.  
  10. subs2() {
  11. echo "before false2: $LINENO"
  12. false 2
  13. }
  14.  
  15. failed() {
  16. local r=$?
  17. set -- "${@:1:$(($#-1))}"
  18. # local line=${last_lineno:-$1}
  19. echo "Err: return $r at $1: $BASH_COMMAND"
  20. echo "Trace: " "$@"
  21. exit $r
  22. }
  23.  
  24. main() {
  25. trap 'failed $LINENO ${BASH_LINENO[@]}' ERR
  26. subs
  27. subs2
  28. echo "end:$LINENO"
  29. }
  30.  
  31. main "$@"
Runtime error #stdin #stdout 0s 19656KB
stdin
Standard input is empty
stdout
before false1: 5
Err: return 1 at 6: false 1
Trace:  6 26 31