# From Kernighan & Pike page 154 # overwrite: copy standard input to output after EOF opath=$PATH PATH=/bin:/usr/bin case $# in 0|1) echo 'Usage: overwrite file cmd [args]' 1>&2; exit 2 esac file=$1; shift new=/tmp/overwr1.$$; old=/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 -f $new $old