#!/bin/sh opath=$PATH PATH=/usr/ucb:/bin:/usr/bin case $# in 0|1) echo 'Usage: overwrite file cmd [args]' 1>&2; exit 2;; esac file=$1; shift new=/usr/tmp/overwr1.$$; old=/usr/tmp/overwr2.$$ trap 'rm -f $new $old; exit 1' 1 2 15 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 -r $old $new