X-Git-Url: https://iankelling.org/git/?p=distro-setup;a=blobdiff_plain;f=mount-latest-subvol;h=5cb226c5676b9539ea96ebab8241b5ccc6ebbec4;hp=ea1d1f89195cc26420e68aa462671d1288eef5c4;hb=f7eaad64a7c5f3bc851f146e1f258d34f398a7d7;hpb=effc74a288ee7e4d0a83bbf3335ba10f95eb7b8a diff --git a/mount-latest-subvol b/mount-latest-subvol index ea1d1f8..5cb226c 100644 --- a/mount-latest-subvol +++ b/mount-latest-subvol @@ -35,28 +35,13 @@ EOF } -errcatch() { - set -E; shopt -s extdebug - _err-trap() { - err=$? - exec >&2 - set +x - echo "${BASH_SOURCE[1]}:${BASH_LINENO[0]}:in \`$BASH_COMMAND' returned $err" - bash-trace 2 - echo "$0: exiting with code $err" - exit $err - } - trap _err-trap ERR - set -o pipefail -} -bash-trace() { - local -i argc_index=0 frame i start=${1:-1} max_indent=8 indent +err-bash-trace() { + local -i argc_index=0 frame i start=${1:-0} max_indent=8 indent local source local extdebug=false if [[ $(shopt -p extdebug) == *-s* ]]; then extdebug=true fi - for ((frame=0; frame < ${#FUNCNAME[@]}-1; frame++)); do argc=${BASH_ARGC[frame]} argc_index+=$argc @@ -64,7 +49,7 @@ bash-trace() { if (( ${#BASH_SOURCE[@]} > 1 )); then source="${BASH_SOURCE[frame+1]}:${BASH_LINENO[frame]}:" fi - indent=$((frame-start+1)) + indent=$((frame-start + 1)) indent=$((indent < max_indent ? indent : max_indent)) printf "%${indent}s↳%sin \`%s" '' "$source" "${FUNCNAME[frame]}" if $extdebug; then @@ -74,8 +59,25 @@ bash-trace() { fi echo \' done + return 0 +} +err-catch() { + set -E; shopt -s extdebug + _err-trap() { + err=$? + exec >&2 + set +x + echo "${BASH_SOURCE[1]}:${BASH_LINENO[0]}: \`$BASH_COMMAND' returned $err" + err-bash-trace 2 + set -e # err trap does not work within an error trap + "${_errcatch_cleanup[@]:-:}" # note :-: is to be compatible with set -u + echo "$0: exiting with code $err" + exit $err + } + trap _err-trap ERR + set -o pipefail } -errcatch +err-catch tu() { while read -r line; do