65 lines
1.3 KiB
Bash
65 lines
1.3 KiB
Bash
# Error management functions
|
|
|
|
# Exit with error
|
|
function die()
|
|
{
|
|
local errorcode=$1
|
|
prnt E "Sortie prématuré avec erreur (code #$errorcode)."
|
|
exit $errorcode
|
|
}
|
|
export -f die
|
|
|
|
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
|
|
}
|