diff --git a/init.sh b/init.sh index e555663..fa13a06 100755 --- a/init.sh +++ b/init.sh @@ -28,14 +28,14 @@ function_exists() { } 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 ) # Vérifie qu'on soit root if [[ $EUID -ne 0 ]]; prnt E "Ce script doit être démarré en tant que root. Arrêt." - exit 1 + die 1 fi # 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..." [[ ! -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 trap 'exec 2>&4 1>&3' 0 1 2 3 exec 1>$LOGFILE 2>&1 @@ -56,9 +56,13 @@ if [[ -e $MYPATH/conf/$HOSTNAME.conf ]]; then prnt I "Une configuration spécifique sera utilisé." . $MYPATH/conf/$HOSTNAME.conf else - prnt I "Une configuration générique sera utilisé." - [[ -e $MYPATH/conf/init.conf.sh ]] && . $MYPATH/conf/init.conf.sh || ( - prnt E "Aucune configuration trouvée, impossible de continuer." + if [[ -e $MYPATH/conf/init.conf.sh ]]; then + prnt I "Une configuration générique sera utilisé." + . $MYPATH/conf/init.conf.sh + else + prnt E "Aucune configuration trouvée, impossible de continuer." + die 2 + fi fi # Profile diff --git a/lib/aaa_errors.sh b/lib/aaa_errors.sh index fe190a7..5aaabfb 100644 --- a/lib/aaa_errors.sh +++ b/lib/aaa_errors.sh @@ -1,9 +1,18 @@ # 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; # Local variables @@ -13,85 +22,20 @@ function exit_handler() local error_file='' local error_lineno='' - - local lineno='' - + local lineno=$1 && shift # Print error header 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 - _backtrace=$( 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" + # Print backtrace + backtrace 2 # Exit the script - prnt E "Sortie !" - - exit "$error_code" + die $error_code } -trap exit_handler EXIT # ! ! ! TRAP EXIT ! ! ! -trap exit ERR # ! ! ! TRAP ERR ! ! ! +# Trigger error function on error +trap error ${LINENO} ERR # Print a backtrace @@ -118,4 +62,3 @@ function backtrace (( i=i++ )) done } -export -f backtrace