introducing die function, simplified error handling function

This commit is contained in:
fatalerrors
2021-06-18 10:45:29 +02:00
parent 71a283e0f5
commit 69035c0c11
2 changed files with 28 additions and 81 deletions

16
init.sh
View File

@@ -28,14 +28,14 @@ function_exists() {
} }
function_exists prnt || ( function_exists prnt || (
echo "Il manque des fonctions vitales dans les bibliothèques !" echo "Il manque des fonctions vitales venant des bibliothèques !"
exit 2 exit 2
) )
# Vérifie qu'on soit root # Vérifie qu'on soit root
if [[ $EUID -ne 0 ]]; if [[ $EUID -ne 0 ]];
prnt E "Ce script doit être démarré en tant que root. Arrêt." prnt E "Ce script doit être démarré en tant que root. Arrêt."
exit 1 die 1
fi fi
# Variables globales importantes # Variables globales importantes
@@ -45,7 +45,7 @@ export LOGFILE=${LOGFILE:-"$MYPATH/log/init-$(uname -n)-$(stdtime).log"}
prnt I "Création du répertoire d'accueil du fichier log..." prnt I "Création du répertoire d'accueil du fichier log..."
[[ ! -d $(dirname $LOGFILE) ]] && mkdir -pv $(dirname $LOGFILE) [[ ! -d $(dirname $LOGFILE) ]] && mkdir -pv $(dirname $LOGFILE)
# Log toute les sortie dans le fichier de log # Log toutes les sortie dans le fichier de log
exec 3>&1 4>&2 exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3 trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>$LOGFILE 2>&1 exec 1>$LOGFILE 2>&1
@@ -56,9 +56,13 @@ if [[ -e $MYPATH/conf/$HOSTNAME.conf ]]; then
prnt I "Une configuration spécifique sera utilisé." prnt I "Une configuration spécifique sera utilisé."
. $MYPATH/conf/$HOSTNAME.conf . $MYPATH/conf/$HOSTNAME.conf
else else
prnt I "Une configuration générique sera utilisé." if [[ -e $MYPATH/conf/init.conf.sh ]]; then
[[ -e $MYPATH/conf/init.conf.sh ]] && . $MYPATH/conf/init.conf.sh || ( prnt I "Une configuration générique sera utilisé."
prnt E "Aucune configuration trouvée, impossible de continuer." . $MYPATH/conf/init.conf.sh
else
prnt E "Aucune configuration trouvée, impossible de continuer."
die 2
fi
fi fi
# Profile # Profile

View File

@@ -1,9 +1,18 @@
# Error management functions # Error management functions
function exit_handler() # Exit with error
function die()
{ {
local error_code="$?" 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; [[ $error_code == 0 ]] && return;
# Local variables # Local variables
@@ -13,85 +22,20 @@ function exit_handler()
local error_file='' local error_file=''
local error_lineno='' local error_lineno=''
local lineno=$1 && shift
local lineno=''
# Print error header # Print error header
prnt E "${BIWhite}*** ${BIRed}Une erreur fatale est intervenue, \ prnt E "${BIWhite}*** ${BIRed}Une erreur fatale est intervenue, \
le script va s'arrêter prématurément !$DEFAULTCOL" le script va s'arrêter immédiatement !$DEFAULTCOL"
# Getting backtrace # Print backtrace
_backtrace=$( backtrace 2 ) backtrace 2
# MANAGING THE OUTPUT:
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #
regex='^([a-z]{1,}) ([0-9]{1,})$'
if [[ $error_lineno =~ $regex ]]; then
# The error line was found on the log
# (e.g. type 'ff' without quotes wherever)
# --------------------------------------------------------------
local row="${BASH_REMATCH[1]}"
lineno="${BASH_REMATCH[2]}"
echo -e "Fichier :\t\t${error_file}"
echo -e "${row} :\t\t${lineno}\n"
echo -e "Code d'erreur :\t${error_code}"
else
regex="^${error_file}\$|^${error_file}\s+|\s+${error_file}\s+|\s+${error_file}\$"
if [[ "$_backtrace" =~ $regex ]]; then
# The file was found on the log but not the error line
# (could not reproduce this case so far)
# ------------------------------------------------------
echo -e "Fichier :\t\t$error_file"
echo -e "Code d'ereur :\t${error_code}"
else
# The error file is the first on backtrace list:
# Exploding backtrace on newlines
mem=$IFS
IFS="\n"
IFS=${IFS:0:1}
local lines=( $_backtrace )
IFS=$mem
error_file=""
if [[ -n "${lines[1]}" ]]; then
array=( ${lines[1]} )
for (( i=2; i<${#array[@]}; i++ )); do
error_file="$error_file ${array[$i]}"
done
# Trim
error_file="$( echo "$error_file" |
sed -e 's/^[ \t]*//' |
sed -e 's/[ \t]*$//' )"
fi
echo -e "Fichier :\t\t$error_file"
echo -e "Colonne :\t\tunknown\n"
echo -e "Code d'erreur :\t${error_code}"
fi
fi
# Print the backtrace
echo -e "\n$_backtrace\n"
# Exit the script # Exit the script
prnt E "Sortie !" die $error_code
exit "$error_code"
} }
trap exit_handler EXIT # ! ! ! TRAP EXIT ! ! ! # Trigger error function on error
trap exit ERR # ! ! ! TRAP ERR ! ! ! trap error ${LINENO} ERR
# Print a backtrace # Print a backtrace
@@ -118,4 +62,3 @@ function backtrace
(( i=i++ )) (( i=i++ ))
done done
} }
export -f backtrace