diff --git a/poc b/poc index b529779..fb57103 100755 --- a/poc +++ b/poc @@ -127,7 +127,6 @@ function on_pipe { function dump_stderr { miaou_debug '' - mapfile -t tmp_error <"$MIAOU_BASH_ERROR" tty_ansi FG_LIGHTBLUE for i in "${tmp_error[@]}"; do echo "$i"; done tty_ansi RESET @@ -179,14 +178,39 @@ function dump_stacktrace { } function on_exit { + local code code="${1:-0}" + mapfile -t tmp_error <"$MIAOU_BASH_ERROR" 2>&3 >&3 dump_stderr - # tmp_error already filled up through the dump_stderr call + if [[ $code -gt 0 && ${#tmp_error[@]} -gt 0 ]]; then - local last_error + local last_error regex last_error="${tmp_error[-1]}" - miaou_debug "" + miaou_debug "" + if [[ $code -eq 1 ]]; then + regex='^(.*): line ([0-9]+): (.*): unbound variable$' + if [[ "$last_error" =~ $regex ]]; then + local source line payload + source="${BASH_REMATCH[1]}" + line="${BASH_REMATCH[2]}" + payload="${BASH_REMATCH[3]}" + miaou_debug "" + failure_code=$code + failure_type='UNBOUND_VARIABLE' + failure_payload="${BASH_REMATCH[3]}" + error_source=("${BASH_SOURCE[@]}") + error_lineno=("${BASH_LINENO[@]}") + error_funcname=("${FUNCNAME[@]}") + unset 'error_source[0]' 'error_lineno[0]' 'error_funcname[0]' + unset 'error_source[-1]' 'error_lineno[-1]' 'error_funcname[-1]' + unset 'error_source[-1]' 'error_lineno[-1]' 'error_funcname[-1]' + error_source=("$source" "${error_source[@]}") + error_lineno=("$line" "${error_lineno[@]}") + error_funcname=("${error_funcname[@]}" '
') + fi + fi + miaou_debug "" fi if [[ -v failure_type ]]; then