Apenas uma pequena pergunta sobre programas de temporização no Linux: o comando time permite medir o tempo de execução de um programa:
[ed@lbox200 ~]$ time sleep 1
real 0m1.004s
user 0m0.000s
sys 0m0.004s
O que funciona bem. Mas se eu tentar redirecionar a saída para um arquivo, ela falhará.
[ed@lbox200 ~]$ time sleep 1 > time.txt
real 0m1.004s
user 0m0.001s
sys 0m0.004s
[ed@lbox200 ~]$ cat time.txt
[ed@lbox200 ~]$
Eu sei que existem outras implementações de tempo com a opção -o para escrever um arquivo, mas minha pergunta é sobre o comando sem essas opções.
Alguma sugestão ?
Respostas:
Experimentar
que combina o STDERR de "time" e seu comando em time.txt
Ou use
que coloca STDERR de "sleep" no arquivo "sleep.stderr" e apenas STDERR de "time" entra em "time.txt"
fonte
time
avalia.{ time sleep 1; } 2>&1 | grep real
. Isso envia stderr para stdout, que o grep pode ler.Quebra automática
time
e o comando que você está cronometrando em um conjunto de colchetes.Por exemplo, os seguintes horários
ls
e gravam o resultadols
e os resultados do tempo emoutfile
:Ou, se você deseja separar a saída do comando da saída capturada de
time
:fonte
Simples. O GNU
time
utilitário tem uma opção para isso.Mas você precisa garantir que está não usando builtin do seu shell
time
de comando, pelo menos, obash
builtin não fornece essa opção! É por isso que você precisa fornecer o caminho completo dotime
utilitário:fonte
Se você se importa com a saída de erro do comando, pode separá-los dessa maneira enquanto ainda usa o comando de tempo interno.
ou
Como você vê, os erros do comando vão para um arquivo (já que
stderr
é usado paratime
).Infelizmente, você não pode enviá-lo para outro identificador (como
3>&2
), pois isso não existirá mais fora do{...}
Dito isto, se você pode usar o tempo GNU, faça o que Tim Ludwinski disse.
fonte
Como a saída do comando 'time' é uma saída de erro, redirecione-a para que a saída padrão seja mais intuitiva para processar ainda mais.
fonte
Se você estiver usando o tempo GNU em vez do bash embutido, tente
(Nota: A hora do GNU formata um pouco diferente do que o bash embutido).
fonte
\time -o outfile command
(com ``) para uso GNU em vez de construído dentro.no seu caso
então
fonte
time
binário real instalado,out
ele conterá algo comobash: time: command not found
.Acabei usando:
fonte
Isso tem o benefício de não gerar subcascas, e o pipeline final tem seu stderr restaurado no stderr real.
fonte
Se você não quiser tocar no stdout e no stderr do processo original, poderá redirecionar o stderr para o descritor de arquivo 3 e vice-versa:
Você pode usar isso para um wrapper (por exemplo, cronjobs) para monitorar tempos de execução:
fonte
Se você estiver usando,
csh
poderá usar:Por exemplo:
fonte