reworked error management, added --logfile option, reworked command line analysing

This commit is contained in:
fatalerrors
2021-07-20 20:59:38 +02:00
parent 0a4029e60d
commit cf6c327c19
4 changed files with 100 additions and 86 deletions

View File

@@ -30,55 +30,37 @@ trap "terminate 'SIGTERM'" SIGTERM
function error()
{
# Check the call is actually the result of an error
local error_code="$?"
[[ $error_code == 0 ]] && return;
# Local variables
local i=0
local regex=''
local mem=''
local error_file=''
local error_lineno=''
local lineno=$1 && shift
local parent_lineno="$1"
local message="$2"
local code="${3:-1}"
# Print error header
prnt E "${BIWhite}*** ${BIRed}Une erreur fatale est intervenue, \
le script va s'arrêter immédiatement !$DEFAULTCOL"
# Print backtrace
backtrace 2
# Exit the script
die $error_code
prnt E "${BIWhite}*** ${BIRed}Une erreur fatale est intervenue, le script va s'arrêter immédiatement !$DEFAULTCOL"
if [[ -n "$message" ]]; then
prnt E "Erreur ligne $parent_lineno, code d'erreur $code avec le message :"
echo -e "\t\t$message"
else
prnt E "Erreur ligne $(caller), avec le code d'erreur $code."
fi
#awk 'NR>L-4 && NR<L+4 { printf "%-5d%3s%s\n",NR,(NR==L?">>>":""),$0 }' L=$1 $0
}
# Trigger error function on error
trap "error ${LINENO}" ERR
trap "error ${LINENO}; backtrace; exit 255" ERR
# Print a backtrace
function backtrace
{
local _start_from_=0
local params=( "$@" )
if (( "${#params[@]}" >= "1" )); then
_start_from_="$1"
fi
local i=0
local first=false
local last=false
while caller $i > /dev/null; do
if [[ -n "$_start_from_" ]] && (( "$i" + 1 >= "$_start_from_" )); then
if [[ "$first" == false ]]; then
echo "==== Pile d'appel ===="
first=true
fi
caller $i
fi
(( i=i++ ))
echo "======== Pile d'appel ========"
typeset -i i=0
for func in "${FUNCNAME[@]}"
do
printf '%15s() %s:%d\n' \
"$func" "${BASH_SOURCE[$i]}" "${BASH_LINENO[$i]}"
let i++ || true
done
echo "=============================="
}
check_root()