current commit
200426.5 · initial commit of ~/bin
#!/bin/sh
# overwrite:  copy standard input to output after EOF
# (final version)

# set -x

case $# in
0|1)	echo 'Usage: overwrite file cmd [args]' 1>&2; exit 2
esac

file=$1; shift
new=/tmp/$$.new; old=/tmp/$$.old
trap 'rm -f $new $old; exit 1' 1 2 15	# clean up files

if "$@" >$new		# collect input
then
	cp $file $old	# save original file
	trap 'trap "" 1 2 15; cp $old $file	# ignore signals
	      rm -f $new $old; exit 1' 1 2 15	# during restore
	cp $new $file
else
	echo "overwrite: $1 failed, $file unchanged" 1>&2
	exit 1
fi
rm -f $new $old