You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

54 lines
1.4 KiB

## CONSTANTS
CURRENT_SOURCE="${BASH_SOURCE[0]}"
# TODO: read and understand the catch function
# https://stackoverflow.com/a/59592881/5018486
## FUNCTIONS
function exit {
local error_code stack_lines stack_functions stack_sources
error_code=$1
stack_lines=("${BASH_LINENO[@]}")
stack_functions=("${FUNCNAME[@]}")
stack_sources=("${BASH_SOURCE[@]}")
#
# # remove 1 on head list
# [[ ${#stack_lines[@]} > 0 && ${stack_lines[0]} == 1 ]] && unset stack_lines[0]
#
# # remove 0 on tail list
# [[ ${#stack_lines[@]} > 0 && ${stack_lines[-1]} == 0 ]] && unset stack_lines[-1]
if [[ $error_code > 0 ]]; then
printf "\nEXIT #${error_code} due to error at line ${stack_lines[*]} : \n-----------------------------------------\n"
echo "FUNCNAME: ${FUNCNAME[@]}" >&2 # inner outer main
echo "BASH_SOURCE: ${BASH_SOURCE[@]}" >&2
echo "BASH_LINENO: ${BASH_LINENO[@]}" >&2
trap - ERR TERM INT EXIT
builtin exit "${error_code}"
else
echo SUCCESS
fi
}
function raise_error {
message=${1:-an undefined error has occured!}
code=${2:-1}
echo "error ${code}: ${message}" >&2
trap - ERR TERM INT EXIT
exit $code
}
_BACKTRACE=${_BACKTRACE:-false}
# echo "_BACKTRACE=${_BACKTRACE}"
${_BACKTRACE} && return
set -TEue
trap 'exit $?' ERR TERM INT EXIT
# echo "current: ${BASH_SOURCE[-1]}"
# echo "ARGV : $@"
export _BACKTRACE=true
# exec ${BASH_SOURCE[-1]} $*
eval $(<${BASH_SOURCE[-1]}) $*