time
é um pouco engraçado. É um Bash embutido, então a primeira coisa que você precisa fazer é limitá-lo ao comando certo. Você pode fazer isso agrupando-o com chaves ou subshelling com parênteses.
Em seguida, você precisa observar que ele é enviado para STDERR
. Isso não será redirecionado por padrão, mas podemos corrigir isso redirecionando STDERR
para STDOUT
e redirecionando isso.
Finalmente (como choroba antes de mim) usando >
irá substituir por padrão. Fazê-lo em um loop resultará apenas na última iteração exibida no arquivo. Você quer >>
que será anexado.
{ time ./merge $i ; } >> nn 2>&1
Se você não quiser nenhum original STDOUT
e quiser apenas a saída de tempo, poderá executar isso:
{ time ./merge $i >/dev/null 2>&1; } 2>> nn
Isso está eliminando toda a saída do comando ./merge
e está apenas redirecionando o STDERR
do bloco maior.
Assim como um teste para mostrar esse trabalho:
$ for i in {1..10}; do { time echo $i >/dev/null 2>&1; } 2>> nn ; done
$ wc -l nn
40 nn
São blocos de tempo de 10 x 4 linhas (a saída de eco é suprimida).