diff options
| author | EuAndreh <eu@euandre.org> | 2024-05-10 08:25:12 -0300 |
|---|---|---|
| committer | EuAndreh <eu@euandre.org> | 2024-05-10 08:25:12 -0300 |
| commit | c5fbe36d5e71a94589039ad9bc422da543fddf01 (patch) | |
| tree | 8d06f197e1b18c27d6446a21628abdb1cfa53fba | |
| parent | clock, minutes, round, statusf: Add working utilities (diff) | |
| download | eut-c5fbe36d5e71a94589039ad9bc422da543fddf01.tar.gz eut-c5fbe36d5e71a94589039ad9bc422da543fddf01.tar.xz | |
src/ifnew: Add working utility
| -rw-r--r-- | deps.mk | 1 | ||||
| -rwxr-xr-x | src/ifnew | 33 |
2 files changed, 34 insertions, 0 deletions
@@ -2,6 +2,7 @@ sources.sh = \ src/assert-arg \ src/clock \ src/color \ + src/ifnew \ src/minutes \ src/mkdtemp \ src/mkstemp \ diff --git a/src/ifnew b/src/ifnew new file mode 100755 index 0000000..c293f63 --- /dev/null +++ b/src/ifnew @@ -0,0 +1,33 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + ifnew [-v] FILE + EOF +} + +MV_ARGS='' +while getopts 'v' flag; do + case "$flag" in + (v) + MV_ARGS='-v' + ;; + (*) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + +FILE="${1:-}" +eval "$(assert-arg -- "$FILE" 'FILE')" + + +STDIN="$FILE.$(uuid).tmp" +trap 'rm -f "$STDIN"' EXIT + +cat - > "$STDIN" +cmp -s "$STDIN" "$FILE" || mv $MV_ARGS "$STDIN" "$FILE" |
