diff options
Diffstat (limited to 'bin/with-email')
-rwxr-xr-x | bin/with-email | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/bin/with-email b/bin/with-email new file mode 100755 index 0000000..7df101a --- /dev/null +++ b/bin/with-email @@ -0,0 +1,91 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + with-email [-s SUBJECT] COMMAND... + with-email -h + EOF +} + +help() { + cat <<-'EOF' + + Options: + -s SUBJECT set the subject of the email + -h, --help show this message + + COMMAND the command to be wrapped + + + Executes COMMAND and send all of its output via email + to eu@euandre.org. + + + Examples: + + Run a script and use the default subject: + + $ with-email -- ./script + + Run a command and use a custom subject: + + $ with-email -s 'CRONJOB' echo 123 + EOF +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +SUBJECT='NO SUBJECT' +while getopts 's:h' flag; do + case "$flag" in + s) + SUBJECT="$OPTARG" + ;; + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + +eval "$(assert-arg "${1:-}" 'COMMAND...')" + +now() { + date '+%Y-%m-%dT%H:%M:%S%Z' +} + +OUT="$(mkstemp)" +{ + printf 'Running command: %s\n' "$*" + printf 'Starting at: %s\n' "$(now)" + printf '\n' + + STATUS=0 + "$@" || STATUS=$? + + printf '\n' + printf '\nFinished at: %s\n' "$(now)" +} 1>"$OUT" 2>&1 + +email -s "(exit status: $STATUS) - $SUBJECT" eu@euandre.org < "$OUT" |