#! /bin/bash # Run given command application and update the contents of a given file. # Will not change the file if its contents has not changed. [[ $# -gt 1 ]] || { echo "Usage: ${0##*/} FILE COMMAND" >&2; exit 1; } set -u declare -r outfile="$1" shift if [[ ! -f $outfile ]]; then $@ >$outfile exit fi declare -r newout=${outfile}.new $@ >$newout rc=$? if cmp -s $newout $outfile; then rm $newout else mv -f $newout $outfile fi exit $rc