poc3
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user