add combined script easy usage
[errhandle.git] / err
1 #!/bin/bash
2 # this file was generated from gen-err and meant to be sourced
3 bash-trace() {
4 local -i argc_index=0 frame i start=${1:-1} max_indent=8 indent
5 local source
6 local extdebug=false
7 if [[ $(shopt -p extdebug) == *-s* ]]; then
8 extdebug=true
9 fi
10 for ((frame=0; frame < ${#FUNCNAME[@]}-1; frame++)); do
11 argc=${BASH_ARGC[frame]}
12 argc_index+=$argc
13 ((frame < start)) && continue
14 if (( ${#BASH_SOURCE[@]} > 1 )); then
15 source="${BASH_SOURCE[frame+1]}:${BASH_LINENO[frame]}:"
16 fi
17 indent=$((frame-start+1))
18 indent=$((indent < max_indent ? indent : max_indent))
19 printf "%${indent}s↳%sin \`%s" '' "$source" "${FUNCNAME[frame]}"
20 if $extdebug; then
21 for ((i=argc_index-1; i >= argc_index-argc; i--)); do
22 printf " %s" "${BASH_ARGV[i]}"
23 done
24 fi
25 echo \'
26 done
27 }
28 errallow() {
29 if [[ $1 ]]; then
30 echo "errallow help: Undo the complimentary errcatch function."
31 else
32 set +E +o pipefail; trap ERR
33 fi
34 }
35 errcatch() {
36 set -E; shopt -s extdebug
37 _err-trap() {
38 err=$?
39 exec >&2
40 set +x
41 echo "${BASH_SOURCE[1]}:${BASH_LINENO[0]}:in \`$BASH_COMMAND' returned $err"
42 bash-trace 2
43 set -e
44 "${_errcatch_cleanup[@]}"
45 echo "$0: exiting with code $err"
46 exit $err
47 }
48 trap _err-trap ERR
49 set -o pipefail
50 }
51 errexit() {
52 exec >&2
53 code=1
54 if [[ $@ ]]; then
55 if [[ ${1/[^0-9]/} == "$1" ]]; then
56 code=$1
57 if [[ $2 ]]; then
58 echo "$2"
59 fi
60 else
61 echo "$0: $1"
62 fi
63 fi
64 echo "${BASH_SOURCE[1]}:${BASH_LINENO[0]}"
65 bash-trace 2
66 echo "$0: exiting with code $code"
67 exit $err
68 }
69 errcatch