#!/bin/bash set -e . ./get-settings find -name '*.IN[O1]' ! -path '*/skeleton/*' -exec perl -e ' use IO::Handle; use POSIX; my $f= shift; my $d= $f; $d =~ s/\.IN([O1])$//; my $overwrite= ($1 eq 'O'); my $g= "$d.new"; open F, "< $f" or die "$f $!"; open G, "> $g" or die "$g $!"; stat F or die "$f $!"; my $mode= (stat F)[2]; while () { s/\%(\w+)\%/ exists($ENV{$1}) ? $ENV{$1} : die "$1 undef at $f:$.\n" /ge; print G or die $!; } F->error and die $!; close G or die $!; if ($mode & 01) { chmod 0755, $g or die "$g $!"; } close F or die $!; if ($overwrite) { rename $g, $d or die "$g $d $!"; } else { if (link $g, $d) { unlink $g or die $!; } else { die "$g $d $!" unless $!==&EEXIST; } } ' '{}' \;