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