1*333d2b36SAndroid Build Coastguard Worker#! /bin/bash 2*333d2b36SAndroid Build Coastguard Worker# Run given command application and update the contents of a given file. 3*333d2b36SAndroid Build Coastguard Worker# Will not change the file if its contents has not changed. 4*333d2b36SAndroid Build Coastguard Worker[[ $# -gt 1 ]] || { echo "Usage: ${0##*/} FILE COMMAND" >&2; exit 1; } 5*333d2b36SAndroid Build Coastguard Workerset -u 6*333d2b36SAndroid Build Coastguard Workerdeclare -r outfile="$1" 7*333d2b36SAndroid Build Coastguard Workershift 8*333d2b36SAndroid Build Coastguard Workerif [[ ! -f $outfile ]]; then 9*333d2b36SAndroid Build Coastguard Worker $@ >$outfile 10*333d2b36SAndroid Build Coastguard Worker exit 11*333d2b36SAndroid Build Coastguard Workerfi 12*333d2b36SAndroid Build Coastguard Worker 13*333d2b36SAndroid Build Coastguard Workerdeclare -r newout=${outfile}.new 14*333d2b36SAndroid Build Coastguard Worker$@ >$newout 15*333d2b36SAndroid Build Coastguard Workerrc=$? 16*333d2b36SAndroid Build Coastguard Workerif cmp -s $newout $outfile; then 17*333d2b36SAndroid Build Coastguard Worker rm $newout 18*333d2b36SAndroid Build Coastguard Workerelse 19*333d2b36SAndroid Build Coastguard Worker mv -f $newout $outfile 20*333d2b36SAndroid Build Coastguard Workerfi 21*333d2b36SAndroid Build Coastguard Workerexit $rc 22