#!/bin/bash
-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
- ((frame < start)) && continue
- if (( ${#BASH_SOURCE[@]} > 1 )); then
- source="${BASH_SOURCE[frame+1]}:${BASH_LINENO[frame]}:"
- fi
- indent=$((frame-start + 1))
- indent=$((indent < max_indent ? indent : max_indent))
- printf "%${indent}s↳%sin \`%s" '' "$source" "${FUNCNAME[frame]}"
- if $extdebug; then
- for ((i=argc_index-1; i >= argc_index-argc; i--)); do
- printf " %s" "${BASH_ARGV[i]}"
- done
- 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
-}
-err-catch
+source /usr/local/lib/err
usage() {
cat <<EOF
restore_old_btrbk=false
cleanup() {
if $restore_new_btrbk; then
- $new_shell sudo systemctl start btrbk.timer
+ m $new_shell sudo systemctl start btrbk.timer
fi
if $restore_old_btrbk; then
- $old_shell sudo systemctl start btrbk.timer
+ m $old_shell sudo systemctl start btrbk.timer
fi
}
-_errcatch_cleanup=cleanup
+_errcatch_cleanup=cleanup # used by sourced err
pre="${0##*/}:"
m() { printf "$pre %s\n" "$*"; "$@"; }
new_host=$2
source /a/bin/bash_unpublished/source-state
-if [[ $old_host != $MAIL_HOST ]]; then
- read -p "warning: \$old_host != \$MAIL_HOST: $old_host != $MAIL_HOST, proceed? y/N "
+if [[ $old_host != "$MAIL_HOST" ]]; then
+ read -r -p "warning: \$old_host != \$MAIL_HOST: $old_host != $MAIL_HOST, proceed? y/N "
if [[ $REPLY != [yY] ]]; then
exit 1
fi