#!/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)" trap 'rm -f "$OUT"' EXIT { 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"