summary refs log tree commit diff
path: root/bin/sponge
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2022-11-18 18:07:38 +0100
committerRobert Günzler <r@gnzler.io>2022-11-18 18:38:21 +0100
commitf005fbf41646437964458d4c2028e6fdc04b59a1 (patch)
tree2db56c1d202137278c5642ed418123b882d35dc5 /bin/sponge
parent5e6e8da510836bbb0c7ac1602d51a394ba02ab2b (diff)
bin: add a few scripts
Diffstat (limited to 'bin/sponge')
-rwxr-xr-xbin/sponge34
1 files changed, 34 insertions, 0 deletions
diff --git a/bin/sponge b/bin/sponge
new file mode 100755
index 0000000..7d106b4
--- /dev/null
+++ b/bin/sponge
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+set -e
+[ -n "$DEBUG" ] && set -x
+
+append=
+while getopts ah opt; do
+	case "$opt" in
+	a) append=1 ;;
+	h | ?)
+		printf "usage: %s [-ah]\n\n" "$(basename "$0")"
+		exit 2
+		;;
+	esac
+done
+shift $((OPTIND - 1))
+outname=$1
+
+tmpfile=$(mktemp)
+trap '{ rm "$tmpfile"; }' EXIT
+
+cat - >"$tmpfile"
+
+if [ -n "$outname" ]; then
+	(
+		if [ -n "$append" ]; then
+			tee -a "$outname" >/dev/null
+		else
+			tee "$outname" >/dev/null
+		fi
+	) <"$tmpfile"
+else
+	cat "$tmpfile"
+fi