O time
incorporado em bash
mostra informações de tempo em STDERR após o comando após ele (o atual) retornar. Portanto, a menos que você os agrupe e passe o STDERR do grupo para um arquivo, somente o STDERR do comando real será redirecionado para o arquivo e o arquivo será fechado quando o comando retornar (antes de time
mostrar suas informações).
Você pode usar o agrupamento de comandos, redirecionando STDOUT e STDERR:
{ time ./tmp.sh ;} &>log.tmp
Ou execute em um subshell:
( time ./tmp.sh ) &>log.tmp
Exemplo:
$ { time sleep 1 ;} 2>time.log
$ cat time.log
real 0m1.001s
user 0m0.000s
sys 0m0.000s
$ ( time sleep 1 ) 2>time.log
$ cat time.log
real 0m1.001s
user 0m0.000s
sys 0m0.000s