re-factoring into my shell script framework.
shifting away from invoking via curl and using a downloaded zip file or git clone.
This commit is contained in:
54
Framework-Includes/ErrorHandling.sh
Normal file
54
Framework-Includes/ErrorHandling.sh
Normal file
@ -0,0 +1,54 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Standard strict mode and error handling/tracing boilderplate..
|
||||
|
||||
# This is a function I include and execute in every shell script that I write.
|
||||
# It sets up a bunch of error handling odds and ends
|
||||
|
||||
# Bits and pieces Sourced from (as best I recall):
|
||||
# * https://news.ycombinator.com/item?id=24727495
|
||||
# * many other hacker news / slashdot etc posts over the years
|
||||
# * https://www.tothenew.com/blog/foolproof-your-bash-script-some-best-practices/
|
||||
# * https://translucentcomputing.com/2020/05/unofficial-bash-strict-mode-errexit/
|
||||
# * http://redsymbol.net/articles/unofficial-bash-strict-mode/
|
||||
# * the school of hard knocks... (aka my code failures...)
|
||||
|
||||
#Here's the beef (as the commercial says..)
|
||||
|
||||
export PS4='(${BASH_SOURCE}:${LINENO}): - [${SHLVL},${BASH_SUBSHELL},$?] $ '
|
||||
|
||||
function error_out()
|
||||
{
|
||||
echo "Bailing out. See above for reason...."
|
||||
exit 1
|
||||
}
|
||||
|
||||
function handle_failure() {
|
||||
local lineno=$1
|
||||
local fn=$2
|
||||
local exitstatus=$3
|
||||
local msg=$4
|
||||
local lineno_fns=${0% 0}
|
||||
if [[ "$lineno_fns" != "-1" ]] ; then
|
||||
lineno="${lineno} ${lineno_fns}"
|
||||
fi
|
||||
echo "${BASH_SOURCE[0]}: Function: ${fn} Line Number : [${lineno}] Failed with status ${exitstatus}: $msg"
|
||||
}
|
||||
|
||||
trap 'handle_failure "${BASH_LINENO[*]}" "$LINENO" "${FUNCNAME[*]:-script}" "$?" "$BASH_COMMAND"' ERR
|
||||
|
||||
#use errexit (a.k.a. set -e) to make your script exit when a command fails.
|
||||
#add || true to commands that you allow to fail.
|
||||
set -o errexit
|
||||
|
||||
# Use set -o nounset (a.k.a. set -u) to exit when your script tries to use undeclared
|
||||
# variables.
|
||||
set -o nounset
|
||||
|
||||
#Use set -o pipefail in scripts to catch (for example) mysqldump fails
|
||||
#in e.g. mysqldump |gzip.
|
||||
#The exit status of the last command that threw a non-zero exit code is returned
|
||||
set -o pipefail
|
||||
|
||||
#Function tracing...
|
||||
set -o functrace
|
Reference in New Issue
Block a user