Files
init.sh/lib/aaa_errors.sh

78 lines
1.6 KiB
Bash

# Error management functions
# Exit with error
function die()
{
local errorcode=$1
[[ $2 == "--force" ]] && unset KEEPGOING
if [[ $KEEPGOING ]]; then
prnt E "Sortie prématuré avec erreur (code #$errorcode)."
exit $errorcode
else
prnt W "On continue malgrés l'erreur #$errorcode."
fi
}
export -f die
function terminate()
{
prnt E "$1 reçu, sortie immédiate."
die 128 --force
}
trap terminate 'Ctrl + C' SIGINT
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
# 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
}
# Trigger error function on error
trap error ${LINENO} 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++ ))
done
}