: overwrite: copy standard input to output after EOF : final version opath=$PATH case $# in 0|1) echo 'Usage: overwrite file cmd [args]' 1>&2; exit 2 esac file=$1; shift new=/tmp/overwr1.$$; old=/tmp/overwr2.$$ : clean up on interrupt trap 'rm -f $new $old; exit 1' 1 2 15 : collect input if PATH=$opath "$@" >$new then cp $file $old trap '' 1 2 15 cp $new $file else echo "overwrite: $1 failed, $file unchanged" 1>&2 exit 1 fi rm -f $new $old