#!/bin/bash # Overwrite a file with a newer version, first emitting a diff DIFFOPTIONS="-uN" # This should be more dynamic oldfile="$1" case $# in 1) newfile="$(mktemp "$oldfile.XXXXXX")" cat > "$newfile" ;; 2) newfile="$2" ;; *) echo "Usage: $(basename "$0") oldfile [newfile]" >&2 echo " oldfile will be clobbered" >&2 exit 1 ;; esac diff $DIFFOPTIONS "$oldfile" "$newfile" mv -f "$newfile" "$oldfile"