Se você usar /usr/bin/time
, a única maneira de enviar o stderr do processo cronometrado e as informações de tempo para diferentes canais é informar ao utilitário time
para fazê-lo. Você não pode fazê-lo com redirecionamentos no shell que chama time
porque o stderr do processo cronometrado e a saída de time
em si são enviados para o mesmo descritor de arquivo.
O utilitário time
que você está usando (com base no seu uso de -f
, é GNU coreutils) tem uma opção -o
para dizer a ele para gravar em um arquivo diferente e -a
para anexar a este ficheiro. Esta opção também existe no FreeBSD e no macOS.
#!/bin/sh
echo "$@" >>/tmp/times
exec time -f %e -a -o /tmp/times -- "$@"
Como alternativa, você pode usar a palavra-chave shell (em shells que a possuem, que inclui bash, ksh e zsh). Com a palavra-chave, você pode controlar onde as informações de tempo passam pelo redirecionamento, porque você pode especificar um redirecionamento como parte do processo cronometrado.
#!/bin/bash
echo "$@" >>/tmp/times
TIMEFORMAT='%R'
{ time "$@" 2>&3; } 3>&2 2>>/tmp/times