From ab70b24e4959d338b8691b989fe2c8ded8f8aa94 Mon Sep 17 00:00:00 2001 From: pvincent Date: Mon, 6 Jul 2026 21:20:41 +0400 Subject: [PATCH] eval version instead of exec --- lib/backtrace.bash | 27 +++++++++++++++++---------- test.sh | 20 ++++++++++++++++++-- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/lib/backtrace.bash b/lib/backtrace.bash index 7701df9..93d7f4a 100644 --- a/lib/backtrace.bash +++ b/lib/backtrace.bash @@ -2,20 +2,18 @@ CURRENT_SOURCE="${BASH_SOURCE[0]}" +# TODO: read and understand the catch function +# https://stackoverflow.com/a/59592881/5018486 + ## FUNCTIONS function exit { - on_exit $1 true -} - -function on_exit { - local error_code bypass_last_call stack_lines + local error_code stack_lines stack_functions stack_sources error_code=$1 - bypass_last_call=${2:-false} - echo $CURRENT_SOURCE bypass_last_call=$bypass_last_call 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] @@ -40,8 +38,17 @@ function raise_error { code=${2:-1} echo "error ${code}: ${message}" >&2 trap - ERR TERM INT EXIT - on_exit $code true + exit $code } +_BACKTRACE=${_BACKTRACE:-false} +# echo "_BACKTRACE=${_BACKTRACE}" +${_BACKTRACE} && return + set -TEue -trap 'on_exit $?' ERR TERM INT EXIT +trap 'exit $?' ERR TERM INT EXIT +# echo "current: ${BASH_SOURCE[-1]}" +# echo "ARGV : $@" +export _BACKTRACE=true +# exec ${BASH_SOURCE[-1]} $* +eval $(<${BASH_SOURCE[-1]}) $* diff --git a/test.sh b/test.sh index 3588c6b..12b79e1 100755 --- a/test.sh +++ b/test.sh @@ -3,10 +3,26 @@ ## CONSTANTS BASEDIR=$(dirname $0) +## FUNCTIONS +function f2 { + echo f2 + return 5 +} ## MAIN +. "$BASEDIR/lib/backtrace.bash" +# set -TEue +# trap 'exit $?' ERR TERM INT EXIT -source "$BASEDIR/lib/backtrace.bash" echo START test -grep toto nope + +for i in $@; do + echo arg: $i +done + +echo $nope +# grep toto nope +raise_error 'coucou' 8 + +f2 echo END test