#!/bin/sh set -euo pipefail usage() { cat <<-'EOF' Usage: ifok [-o OUTFILE] COMMAND... EOF } OUTFILE='/dev/stdout' while getopts 'o:' flag; do case "$flag" in (o) OUTFILE="$OPTARG" ;; (*) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) if [ -w "$(dirname -- "$OUTFILE")" ]; then TEMPFILE="$OUTFILE.$(uuidx).tmp" else TEMPFILE="$(mkstemp)" fi trap 'rm -f "$TEMPFILE"' EXIT STATUS=0 "$@" > "$TEMPFILE" || STATUS=$? if [ "$STATUS" = 0 ]; then mv "$TEMPFILE" "$OUTFILE" 2>/dev/null || cp "$TEMPFILE" "$OUTFILE" fi exit "$STATUS"