#!/bin/bash
set -E
subs() {
echo "before false1: $LINENO"
false 1
echo "after false1: $LINENO"
}
subs2() {
echo "before false2: $LINENO"
false 2
}
failed() {
local r=$?
set -- "${@:1:$(($#-1))}"
# local line=${last_lineno:-$1}
echo "Err: return $r at $1: $BASH_COMMAND"
echo "Trace: " "$@"
exit $r
}
main() {
trap 'failed $LINENO ${BASH_LINENO[@]}' ERR
subs
subs2
echo "end:$LINENO"
}
main "$@"
IyEvYmluL2Jhc2gKc2V0IC1FCgpzdWJzKCkgewogIGVjaG8gImJlZm9yZSBmYWxzZTE6ICRMSU5FTk8iCiAgZmFsc2UgMQogIGVjaG8gImFmdGVyIGZhbHNlMTogJExJTkVOTyIKfQoKc3ViczIoKSB7CiAgZWNobyAiYmVmb3JlIGZhbHNlMjogJExJTkVOTyIKICBmYWxzZSAyCn0KCmZhaWxlZCgpIHsKICBsb2NhbCByPSQ/CiAgc2V0IC0tICIke0A6MTokKCgkIy0xKSl9IgogICMgbG9jYWwgbGluZT0ke2xhc3RfbGluZW5vOi0kMX0KICBlY2hvICJFcnI6IHJldHVybiAkciBhdCAkMTogJEJBU0hfQ09NTUFORCIKICBlY2hvICJUcmFjZTogIiAiJEAiCiAgZXhpdCAkcgp9CgptYWluKCkgewogIHRyYXAgJ2ZhaWxlZCAkTElORU5PICR7QkFTSF9MSU5FTk9bQF19JyBFUlIKICBzdWJzCiAgc3ViczIKICBlY2hvICJlbmQ6JExJTkVOTyIKfQoKbWFpbiAiJEAi