|
|
@ -127,7 +127,6 @@ function on_pipe { |
|
|
|
|
|
|
|
|
function dump_stderr { |
|
|
function dump_stderr { |
|
|
miaou_debug '<stderr>' |
|
|
miaou_debug '<stderr>' |
|
|
mapfile -t tmp_error <"$MIAOU_BASH_ERROR" |
|
|
|
|
|
tty_ansi FG_LIGHTBLUE |
|
|
tty_ansi FG_LIGHTBLUE |
|
|
for i in "${tmp_error[@]}"; do echo "$i"; done |
|
|
for i in "${tmp_error[@]}"; do echo "$i"; done |
|
|
tty_ansi RESET |
|
|
tty_ansi RESET |
|
|
@ -179,14 +178,39 @@ function dump_stacktrace { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function on_exit { |
|
|
function on_exit { |
|
|
|
|
|
local code |
|
|
code="${1:-0}" |
|
|
code="${1:-0}" |
|
|
|
|
|
|
|
|
|
|
|
mapfile -t tmp_error <"$MIAOU_BASH_ERROR" |
|
|
2>&3 >&3 dump_stderr |
|
|
2>&3 >&3 dump_stderr |
|
|
# tmp_error already filled up through the dump_stderr call |
|
|
|
|
|
|
|
|
|
|
|
if [[ $code -gt 0 && ${#tmp_error[@]} -gt 0 ]]; then |
|
|
if [[ $code -gt 0 && ${#tmp_error[@]} -gt 0 ]]; then |
|
|
local last_error |
|
|
|
|
|
|
|
|
local last_error regex |
|
|
last_error="${tmp_error[-1]}" |
|
|
last_error="${tmp_error[-1]}" |
|
|
miaou_debug "<on_exit exit=$code last_error='$last_error' />" |
|
|
|
|
|
|
|
|
miaou_debug "<on_exit exit=$code last_error='$last_error'>" |
|
|
|
|
|
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 "<unbound_variable source=${source} line=${line} payload=${payload}>" |
|
|
|
|
|
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[@]}" '<main>') |
|
|
|
|
|
fi |
|
|
|
|
|
fi |
|
|
|
|
|
miaou_debug "</on_exit>" |
|
|
fi |
|
|
fi |
|
|
|
|
|
|
|
|
if [[ -v failure_type ]]; then |
|
|
if [[ -v failure_type ]]; then |
|
|
|