This commit is contained in:
pvincent
2026-07-27 11:44:17 +04:00
parent dd56daa24d
commit 5a752fa210
2 changed files with 44 additions and 8 deletions
+42 -8
View File
@@ -25,14 +25,25 @@ function tty_ansi {
} }
function on_error { function on_error {
local code
code="${1:-100}"
>/dev/tty printf '\r' # force carriage return explicitly >/dev/tty printf '\r' # force carriage return explicitly
code="${1:-100}" miaou_debug "on_error: $code ($$ -- $BASHPID)"
# miaou_debug "on_error: $code ($$ -- $BASHPID)"
if [[ $$ == "$BASHPID" ]]; then if [[ $$ == "$BASHPID" ]]; then
>&2 echo "${BASH_SOURCE[1]}: line ${BASH_LINENO[0]}: command_error: ${code}" >&2 echo "${BASH_SOURCE[1]}: line ${BASH_LINENO[0]}: command_error: ${code}"
failure_type="COMMAND_ERROR" failure_type="COMMAND_ERROR"
error_source=("${BASH_SOURCE[@]}")
error_lineno=("${BASH_LINENO[@]}")
error_funcname=("${FUNCNAME[@]}")
unset 'error_source[-1]' 'error_lineno[-1]' 'error_funcname[-1]'
unset 'error_source[0]' 'error_lineno[-1]' 'error_funcname[0]'
error_funcname[-1]='<main>'
error_source=("${error_source[@]}")
error_lineno=("${error_lineno[@]}")
error_funcname=("${error_funcname[@]}")
exit "$code" exit "$code"
else else
>&2 echo "${BASH_SOURCE[1]}: line ${BASH_LINENO[0]}: subshell_error: ${code}" >&2 echo "${BASH_SOURCE[1]}: line ${BASH_LINENO[0]}: subshell_error: ${code}"
@@ -60,9 +71,15 @@ function dump_failure {
} }
function dump_stacktrace { function dump_stacktrace {
miaou_debug --stacktrace-- miaou_debug --stacktrace ${#error_source[@]}--
tty_ansi 94 tty_ansi 94
echo TODO: stacktrace... local i source lineno funcname
for i in "${!error_source[@]}"; do
source="${error_source[$i]}"
lineno="${error_lineno[$i]}"
funcname="${error_funcname[$i]}"
printf "%40s:%.4s \t%s\n" "$source" "$lineno" "$funcname"
done
tty_ansi 0 tty_ansi 0
miaou_debug --end of stacktrace-- miaou_debug --end of stacktrace--
} }
@@ -79,13 +96,30 @@ function on_exit {
} }
function on_pipe { function on_pipe {
local code=141 # default code error for pipe local code tmp_error regex
local tmp_error regex
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]'
mapfile -t tmp_error <"$MIAOU_BASH_ERROR" mapfile -t tmp_error <"$MIAOU_BASH_ERROR"
last_error="${tmp_error[-1]}" last_error="${tmp_error[-1]}"
regex='.*: line [0-9]+: subshell_error: ([0-9]+)' regex='(.*): line ([0-9]+): subshell_error: ([0-9]+)'
[[ $last_error =~ $regex ]] && code=${BASH_REMATCH[1]} && failure_type="SUBSHELL_ERROR" if [[ $last_error =~ $regex ]]; then
source=${BASH_REMATCH[1]}
lineno=${BASH_REMATCH[2]}
code=${BASH_REMATCH[3]}
failure_type="SUBSHELL_ERROR"
error_source=("$source" "${error_source[@]}")
error_lineno=("$lineno" "${error_lineno[@]}")
error_funcname=("${error_funcname[@]}" '<main>')
else
code=141
failure_type="PIPE_ERROR"
fi
# miaou_debug on_pipe: "${code}" # miaou_debug on_pipe: "${code}"
exit "$code" exit "$code"
+2
View File
@@ -22,6 +22,7 @@ function do_subshell_term {
# echo 'toto' | return 3 # echo 'toto' | return 3
echo -n "found1=$(grep nope nope)" echo -n "found1=$(grep nope nope)"
echo -n "found1=$(false)"
# echo "found1=$(grep nope nope | grep none)" # echo "found1=$(grep nope nope | grep none)"
# echo "found2=$(command_not_found)" # echo "found2=$(command_not_found)"
# echo SHOULD NOT SHOW UP! # echo SHOULD NOT SHOW UP!
@@ -139,6 +140,7 @@ function main {
F1 F1
F3 F3
echo before subshell echo before subshell
grep nope nope 2>/dev/null
echo "here in subshell $(grep titi $0)" echo "here in subshell $(grep titi $0)"
echo NO MORE echo NO MORE