Em muitos shells, incluindo ksh
, zsh
e bash
, time
é uma palavra-chave e é usada para pipelines de tempo.
time foo | bar
Horário dos comandos foo
e bar
( zsh
mostrará o detalhamento). Ele relata isso no stderr da shell.
time foo.sh > bar.txt
Irá lhe informar o tempo necessário para abrir bar.txt
e executar foo.sh
.
Se você quiser redirecionar a saída de time
, será necessário redirecionar stderr
no contexto em que time
é iniciado como:
{ time foo.sh; } 2> bar.txt
Isto:
2> bar.txt time foo.sh
funciona também, mas com ksh93
e bash
, porque não está na primeira posição, time
não é reconhecido como uma palavra-chave, então o comando time
é usado em vez disso ( você provavelmente notará o formato de saída diferente e não fará pipelines de tempo).
Observe que ambos redirecionariam a saída de tempo e os erros de foo.sh
para bar.txt
. Se você quiser apenas a saída de tempo, precisará:
{ time foo.sh 2>&3 3>&-; } 3>&2 2> bar.txt
Observe que o POSIX não especifica se time
se comporta como uma palavra-chave ou integrada (se é um tempo pipelines ou comandos únicos). Portanto, para ser portável (caso você queira usá-lo em um script sh
que você deseja portável para sistemas diferentes do tipo Unix), você provavelmente deve escrevê-lo:
command time -p foo.sh 2> bar.txt
Note que você não pode programar funções, built-in ou pipelines ou redirecionar os erros foo.sh
separadamente, a menos que você inicie um shell separado, como em:
command time -p sh -c 'f() { blah; }; f | cat'
Mas isso significa que o tempo também incluirá o tempo de inicialização desse extra sh
.