From 4f04315c3c539e0f1f6b1aa7af76ff6c261b44cf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 27 Mar 2025 08:11:10 -0300 Subject: src/ifok: Add working utility --- src/ifok | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100755 src/ifok (limited to 'src') diff --git a/src/ifok b/src/ifok new file mode 100755 index 0000000..9b75a9f --- /dev/null +++ b/src/ifok @@ -0,0 +1,40 @@ +#!/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.$(uuid).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" -- cgit v1.2.3