#!/bin/ksh function tsrun { typeset err out ret err=$(mktemp /tmp/XXXXXXXXXX) out=$(mktemp /tmp/XXXXXXXXXX) trap "rm $err $out" EXIT eval "$@" >$out 2>$err ret=$? sed 's/^/| /' $out sed 's/^/@ /' $err print '? '$ret } function tseval { typeset ln while read ln do case ${ln%% *} in $) print "$ln" tsrun "${ln#$}" ;; !(?|@|\|)) print "$ln" ;; esac done } (( $# == 0 )) && exit 64 if [[ $1 = -b ]] then (( $# == 1 )) && exit 64 shift for fn do cp $fn $fn~ (rm $fn && tseval >$fn) <$fn done else for fn do tseval <$fn | diff -u $fn - done fi