yell() { echo "$0: $*" >&2; } # print script path and all args to stderr
 die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status
 must() { "$@" || die "cannot $*"; } # runs args as command, reports args if command fails
 yell() { echo "$0: $*" >&2; } # print script path and all args to stderr
 die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status
 must() { "$@" || die "cannot $*"; } # runs args as command, reports args if command fails