4 usage () { echo >&2 "$0 FILE ... -- PROG ARGS"; exit 1; }
7 echo "$0 FILE ... -- PROG ARGS"
8 echo " For each FILE, run PROG ARGS with stdin from FILE. If all is"
9 echo " good, replace each FILE with the corresponding output."
10 echo " Clobbers FILE.old and FILE.new."
18 [ "$f" = -- ] && break
19 file=("${file[@]}" "$f")
24 for f in "${file[@]}"; do
25 rm -f "$f.new" "$f.old"
28 trap cleanup_a EXIT INT QUIT TERM
30 for f in "${file[@]}"; do "$@" <"$f" >"$f.new"; done
31 for f in "${file[@]}"; do cp "$f" "$f.old"; done
34 for f in "${file[@]}"; do
39 trap cleanup_b EXIT INT QUIT TERM
41 for f in "${file[@]}"; do mv "$f.new" "$f"; done
42 trap '' EXIT INT QUIT TERM
43 for f in "${file[@]}"; do rm -f "$f.old"; done