reworked error management, added --logfile option, reworked command line analysing
This commit is contained in:
@@ -30,55 +30,37 @@ 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
|
||||
|
||||
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"
|
||||
|
||||
# Print backtrace
|
||||
backtrace 2
|
||||
|
||||
# Exit the script
|
||||
die $error_code
|
||||
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}" ERR
|
||||
trap "error ${LINENO}; backtrace; exit 255" 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++ ))
|
||||
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()
|
||||
|
||||
Reference in New Issue
Block a user