diff options
author | EuAndreh <eu@euandre.org> | 2025-03-27 08:11:10 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2025-03-27 08:11:10 -0300 |
commit | 4f04315c3c539e0f1f6b1aa7af76ff6c261b44cf (patch) | |
tree | ceccfe8f7d43fefa777c9814071b0fb4a39884e1 /src | |
parent | src/mandir: Add first draft (diff) | |
download | eut-4f04315c3c539e0f1f6b1aa7af76ff6c261b44cf.tar.gz eut-4f04315c3c539e0f1f6b1aa7af76ff6c261b44cf.tar.xz |
src/ifok: Add working utility
Diffstat (limited to 'src')
-rwxr-xr-x | src/ifok | 40 |
1 files changed, 40 insertions, 0 deletions
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" |