#! /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 |