Não estou dizendo que essa é a solução perfeita, de qualquer forma, mas acho que basicamente consegue o que você precisa. Basta enrolar o script principal em uma função e ter uma função separada para chamar a hora. Tenho certeza de que isso poderia ser muito melhorado para obter o resultado exato desejado, mas aqui está o que eu criei:
#!/bin/bash
tstamp() { date +[%T:%N]; }
yourscript() {
set -x
echo hello
sleep 1
echo this
sleep 2
echo is
sleep 3
echo an
echo example
}
yourscript | while read line; do echo -e "$(tstamp)\t$line"; done
O script acima gera o seguinte:
+ echo hello
+ sleep 1
[16:17:33:344851100] hello
+ echo this
+ sleep 2
[16:17:34:352269700] this
+ echo is
+ sleep 3
[16:17:36:380810900] is
+ echo an
+ echo example
[16:17:39:392033300] an
[16:17:39:414361400] example