Browse Source

bash-strict

main
pvincent 2 weeks ago
parent
commit
59f52fe346
  1. 29
      bin/bash-strict
  2. 52
      lib/halt.bash
  3. 15
      test5.sh
  4. 15
      test6.sh

29
bin/bash-strict

@ -0,0 +1,29 @@
#!/usr/bin/env -S -- bash
function on_exit {
code=${1:-0}
echo ON_EXIT2 $code
[[ -s /tmp/error ]] && cat /tmp/error
trap - ERR TERM INT EXIT
builtin exit $code
}
echo BASH_STRICT $@
echo ----------
command=$1
shift
args=("$@")
args2=()
for i in "${args[@]}"; do
echo ARG: $i
args2+=("${i@Q}")
done
echo "----$command ${args2[@]}------"
set -TEue -o pipefail
export -f on_exit
echo PROCESS START
bash -c "set -TEue -o pipefail; trap 'on_exit \$?' ERR TERM INT EXIT; source $command ${args2[*]}" 3>&1 1>&2 2>&3 | tee /tmp/error
echo PROCESS END succesfully

52
lib/halt.bash

@ -0,0 +1,52 @@
function blabla {
echo IN blabla OUT
}
function exit {
local error_code stack_lines stack_functions stack_sources
error_code=${1:-0}
stack_lines=("${BASH_LINENO[@]}")
stack_functions=("${FUNCNAME[@]}")
stack_sources=("${BASH_SOURCE[@]}")
unset stack_functions[0]
unset stack_sources[0]
unset stack_lines[-1]
if [[ $error_code > 0 ]]; then
printf "\nEXIT #${error_code} due to error at line ${stack_lines} : \n-----------------------------------------\n"
[[ -s /tmp/error ]] && echo -ne 'CAUSE:\t\t' && cat /tmp/error
echo -e "FUNCNAME:\t${stack_functions[@]}" >&2 # inner outer main
echo -e "BASH_SOURCE:\t${stack_sources[@]}" >&2
echo -e "BASH_LINENO:\t${stack_lines[@]}" >&2
trap - ERR TERM INT EXIT
builtin exit "${error_code}"
else
echo __REAL_SUCCESS
fi
}
function _backtrace_perform {
echo LAUNCH script...
export -f exit
export -f blabla
set -TEue
trap 'exit $?' ERR TERM INT EXIT
source=${BASH_SOURCE[-1]}
_BACKTRACE=true
export _BACKTRACE
echo call1 exec $source $*
bash -c "set -TEue; trap 'exit $?' ERR TERM INT EXIT; source $source $*" 3>&1 1>&2 2>&3 | tee /tmp/error
trap - ERR TERM INT EXIT
builtin exit
echo NOT VISIBLE
}
_BACKTRACE=${_BACKTRACE:-false}
echo _BACKTRACE=${_BACKTRACE}
${_BACKTRACE} && return
_backtrace_perform

15
test5.sh

@ -0,0 +1,15 @@
#!/usr/bin/env -S -- bash-strict
# source lib/halt.bash
# _BACKTRACE=${_BACKTRACE:-false}
# echo TEST5_BACKTRACE=$_BACKTRACE
echo START TEST5 $@
for i in "$@"; do
echo ARG: $i
done
# blabla
unknown_command
# echo $nope
echo END TEST5

15
test6.sh

@ -0,0 +1,15 @@
#!/usr/bin/env -S -- bash-script
# source lib/halt.bash
# _BACKTRACE=${_BACKTRACE:-false}
# echo TEST5_BACKTRACE=$_BACKTRACE
echo START TEST5 $@
for i in "$@"; do
echo ARG: $i
done
# blabla
unknown_command
# echo $nope
echo END TEST5
Loading…
Cancel
Save