diff options
Diffstat (limited to '')
| -rwxr-xr-x | bin/sponge | 34 |
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 |