From d7be03af91b84446698b2906cd0ca61e1ff54066 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sat, 10 Apr 2021 13:08:28 +0000 Subject: [PATCH] Improve error handling --- scripts/armbian_rootenc_setup.sh | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/scripts/armbian_rootenc_setup.sh b/scripts/armbian_rootenc_setup.sh index fc7d619..724e2aa 100755 --- a/scripts/armbian_rootenc_setup.sh +++ b/scripts/armbian_rootenc_setup.sh @@ -137,29 +137,25 @@ die() { exit 1 } -_fmsg() { - local funcname=$1 errval=$2 res +_return_handler() { + local funcname=${FUNCNAME[1]} exitval=$? res if [ "${funcname:0:1}" == '_' -o "$no_fmsg" ]; then no_fmsg= return 0 fi - if [ "$errval" -eq 0 ]; then res='OK'; else res="False ($errval)"; fi + if [ "$exitval" -eq 0 ]; then res='OK'; else res="False ($exitval)"; fi printf "$BLUE%-32s $res$RESET\n" "$funcname" >&$stdout_dup } _sigint_handler() { warn "\nExiting at user request" - usr_exit=1 exit 1 } -_exit_handler() { - local err=$? - _show_output - [ $err -ne 0 -a -z "$usr_exit" ] && { - rmsg "$SCRIPT_DESC exiting with error (exit code $err)" - } - return $err +_error_handler() { + local exitval=$? + warn "$(basename ${BASH_SOURCE[1]}):${BASH_LINENO[0]}: ${FUNCNAME[1]}() failed at command '$BASH_COMMAND'" + rmsg "$SCRIPT_DESC exiting with error ($exitval)" } _do_header() { @@ -471,8 +467,6 @@ _preclean() { } _clean() { - local err=$? - [ $err -ne 0 -a -z "$usr_exit" ] && rmsg "$SCRIPT_DESC exiting with error (exit code $err)" pu_msg "Cleaning up, please wait..." _show_output close_loopmount @@ -661,7 +655,6 @@ _user_confirm() { [ "$dfl_action" == 'yes' -a -z "$reply" ] && return [ "$reply" == 'y' -o "$reply" == 'Y' ] && return warn "Exiting at user request" - usr_exit=1 exit 1 } @@ -1106,6 +1099,8 @@ _set_env_vars() { # begin execution +set -e + while getopts hCdmfFpRsuvz OPT do case "$OPT" in @@ -1128,11 +1123,12 @@ done shift $((OPTIND-1)) -trap '_fmsg "$FUNCNAME" $?' RETURN +trap '_return_handler' RETURN trap '_sigint_handler' INT -trap '_exit_handler' EXIT +trap '_error_handler' ERR set -o functrace +set -o errtrace exec {stdout_dup}>&1 exec {stderr_dup}>&2 @@ -1148,7 +1144,6 @@ _set_env_vars $@ if [ "$ARG1" == 'in_target' ]; then SCRIPT_DESC='Target script' - set -e _hide_output [ "$target_distro" == 'bionic' ] && { echo 'export CRYPTSETUP=y' > '/etc/initramfs-tools/conf.d/cryptsetup' @@ -1169,7 +1164,6 @@ else _warn_user_opts _confirm_user_vars - set -e [ "$IP_ADDRESS" == 'none' ] || get_authorized_keys create_build_dir