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 .