#!/bin/bash set -e mode_subst () { $fn >$bfn.new } mode_diff () { diff -u $dot $bfn.new || test $? = 1 } mode_install () { mv -f $bfn.new $dot } mode=$1 case "$mode" in subst|diff|install) ;; *) echo >&2 'bad mode'; exit 1; esac shift for fn in templates/*.in; do bfn=${fn%.in} dot=$HOME/.${bfn#*/} mode_$mode done