Browse Source

eval version instead of exec

main
pvincent 2 weeks ago
parent
commit
ab70b24e49
  1. 27
      lib/backtrace.bash
  2. 20
      test.sh

27
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]}) $*

20
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
Loading…
Cancel
Save