#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: forever [-q] COMMAND... forever -h EOF } help() { cat <<-'EOF' Options: -q quiet mode, don't print exit code messages -h, --help show this message COMMAND shell command to be wrapped Run COMMAND forever. Examples: Print 123 forever: $ forever echo 123 EOF } for flag in "$@"; do case "$flag" in (--) break ;; (--help) usage help exit ;; (*) ;; esac done QUIET=false while getopts 'qh' flag; do case "$flag" in (q) QUIET=true ;; (h) usage help exit ;; (*) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) eval "$(assert-arg -- "${1:-}" 'COMMAND')" while true; do STATUS=0 "$@" || STATUS=$? if [ "$QUIET" = false ]; then printf 'Exitted with code %s.\n' "$STATUS" >&2 fi done