Files
init.sh/lib/aaa_errors.sh

74 lines
1.8 KiB
Bash

# Error management functions
# Exit with error
function die()
{
local errorcode=$1
# Don't trigger the ERR signal as we already managed the error
trap - ERR
if [[ "$KEEPGOING" != "true" ]] || [[ "$2" == "--force" ]]; then
prnt E "Sortie prématuré avec erreur (code #$errorcode)."
exit $errorcode
else
prnt W "On continue malgrés l'erreur #$errorcode."
fi
# Put the trigger back (only executed with --keepgoing)
trap "error ${LINENO}" ERR
}
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()
{
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"
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}; backtrace; exit 255" ERR
# Print a backtrace
function backtrace
{
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()
{
[[ $NO_ROOT_CHECK == true ]] && return 0
if [[ $EUID -ne 0 ]]; then
prnt E "Ce script doit être démarré en tant que root. Arrêt."
die 4 --force
fi
}