2025-11-28 18:12:06 +01:00
|
|
|
#!/usr/bin/env ksh
|
2022-10-04 14:16:59 +00:00
|
|
|
|
|
|
|
|
function tsrun
|
|
|
|
|
{
|
2025-11-28 18:12:06 +01:00
|
|
|
typeset ret
|
2022-10-04 14:16:59 +00:00
|
|
|
|
2025-11-28 18:12:06 +01:00
|
|
|
sh -c "$@" >$out 2>$err
|
2022-10-04 14:16:59 +00:00
|
|
|
ret=$?
|
|
|
|
|
sed 's/^/| /' $out
|
|
|
|
|
sed 's/^/@ /' $err
|
2025-11-28 18:12:06 +01:00
|
|
|
(( ret != 0 )) && print "? $ret"
|
2022-10-04 14:16:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function tseval
|
|
|
|
|
{
|
|
|
|
|
typeset ln
|
|
|
|
|
|
|
|
|
|
while read ln
|
|
|
|
|
do
|
|
|
|
|
case ${ln%% *} in
|
|
|
|
|
$)
|
|
|
|
|
print "$ln"
|
|
|
|
|
tsrun "${ln#$}"
|
|
|
|
|
;;
|
2025-11-28 18:12:06 +01:00
|
|
|
!(\?|@|\|))
|
2022-10-04 14:16:59 +00:00
|
|
|
print "$ln"
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-28 18:12:06 +01:00
|
|
|
function tsexpand
|
|
|
|
|
{
|
|
|
|
|
typeset ln
|
|
|
|
|
|
|
|
|
|
while read ln
|
|
|
|
|
do
|
|
|
|
|
case ${ln%% *}
|
|
|
|
|
in
|
|
|
|
|
\?|@|\|)
|
|
|
|
|
eval print \""$ln"\"
|
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
|
print "$ln"
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-04 14:16:59 +00:00
|
|
|
(( $# == 0 )) && exit 64
|
|
|
|
|
|
2025-11-28 18:12:06 +01:00
|
|
|
err=$(mktemp /tmp/XXXXXXXXXX)
|
|
|
|
|
out=$(mktemp /tmp/XXXXXXXXXX)
|
|
|
|
|
trap "rm $err $out" HUP INT QUIT TERM
|
|
|
|
|
|
2022-10-04 14:16:59 +00:00
|
|
|
if [[ $1 = -b ]]
|
|
|
|
|
then
|
|
|
|
|
(( $# == 1 )) && exit 64
|
|
|
|
|
shift
|
|
|
|
|
for fn
|
|
|
|
|
do
|
|
|
|
|
cp $fn $fn~
|
|
|
|
|
(rm $fn && tseval >$fn) <$fn
|
|
|
|
|
done
|
|
|
|
|
else
|
2025-11-28 18:12:06 +01:00
|
|
|
exp=$(mktemp /tmp/XXXXXXXXXX)
|
|
|
|
|
trap "rm $exp" HUP INT QUIT TERM
|
2022-10-04 14:16:59 +00:00
|
|
|
for fn
|
|
|
|
|
do
|
2025-11-28 18:12:06 +01:00
|
|
|
tsexpand <$fn >$exp
|
|
|
|
|
tseval <$fn | diff -u $exp -
|
2022-10-04 14:16:59 +00:00
|
|
|
done
|
2025-11-28 18:12:06 +01:00
|
|
|
rm $exp
|
2022-10-04 14:16:59 +00:00
|
|
|
fi
|
2025-11-28 18:12:06 +01:00
|
|
|
rm $err $out
|