Em ksh, bash e zsh, time
é uma palavra-chave, não uma incorporada. Redirecionamentos na mesma linha aplicam-se apenas ao comando que está sendo cronometrado, e não à saída de time
em si.
$ time ls -d / /nofile >/dev/null 2>/dev/null
real 0m0.003s
user 0m0.000s
sys 0m0.000s
Para redirecionar a saída do time
nesses shells, você precisa usar um nível adicional de agrupamento.
{ time mycommand 2>&3; } 3>&2 2>mycommand.time
Se você usar a versão GNU do utilitário time
autônomo, ele terá uma opção -o
para gravar a saída de time
em outro lugar que stderr. Você pode fazer time
escrever no terminal:
/usr/bin/time -o /dev/tty mycommand >/dev/null 2>/dev/null
Se você quiser manter a saída de time
em seu erro padrão, você precisa de um nível extra de embaralhamento do descritor de arquivo.
/usr/bin/time -o /dev/fd/3 mycommand 3>&2 >/dev/null 2>/dev/null
Com qualquer utilitário time
, você pode invocar um shell intermediário para executar os redirecionamentos desejados. Invocar um shell intermediário para executar ações extras, como cd
, redirecionamentos, etc., é bastante comum - é o tipo de pequenas coisas que os shells são projetados para fazer.
/usr/bin/time sh -c 'exec mycommand >/dev/null 2>/dev/null'