Quero executar algo em um shell linux sob algumas condições diferentes e poder gerar o tempo de execução de cada execução.
Eu sei que eu poderia escrever um script perl ou python que faria isso, mas existe uma maneira de fazê-lo no shell? (que é o bash)
Ticks
do windows?Respostas:
Use o built-in
time
palavra chave :Exemplo:
fonte
time -p i=x; while read line; do x=x; done < /path/to/file.txt
? Ele retorna imediatamente 0,00, a menos que eu não coloque nada antes do loop while .. o que dá?time
o tempo pode um gasoduto inteira como está (em virtude de ser um Bash palavra-chave ), você precisará usar um comando do grupo ({ ...; ...; }
) para tempo vários comandos:time -p { i=x; while read line; do x=x; done < /path/to/file.txt; }
type -a time
Você pode obter informações muito mais detalhadas do que o bash interno
time
(que Robert Gamble menciona) usando o tempo (1) . Normalmente é isso/usr/bin/time
.Nota do editor: para garantir que você esteja chamando o utilitário externo
time
em vez datime
palavra-chave do seu shell , chame-o como/usr/bin/time
.time
é um utilitário exigido pelo POSIX , mas a única opção necessária para o suporte é-p
.Plataformas específicas implementam extensões específicas e fora do padrão:
-v
trabalha com o utilitário GNUtime
, como demonstrado abaixo (a questão está marcadalinux); a implementação do BSD / macOS usa-l
para produzir resultados semelhantes - consulteman 1 time
.Exemplo de saída detalhada:
fonte
fonte
Para uma medição delta linha a linha, tente o gnomon .
Você também pode usar as opções
--high
e / ou--medium
para especificar um limite de duração em segundos, durante o qual o gnomon destacará o carimbo de data / hora em vermelho ou amarelo. E você pode fazer algumas outras coisas também.fonte
Se você quiser mais precisão, use
%N
comdate
(e usebc
para o diff, porque$(())
apenas lida com números inteiros).Veja como fazê-lo:
Exemplo:
Resultado:
fonte
Se você pretende usar os horários posteriormente para calcular, aprenda como usar a
-f
opção de/usr/bin/time
para gerar código que economiza tempo. Aqui está um código que usei recentemente para obter e classificar os tempos de execução de toda uma classe de programas de alunos:Mais tarde concatenei todos os
$timefile
arquivos e canalizei a saída em um intérprete Lua . Você pode fazer o mesmo com Python ou bash ou qualquer que seja sua sintaxe favorita. Eu amo essa técnica.fonte
/usr/bin/time
é necessário porque, emborawhich time
lhe diga o contrário, se você simplesmente executartime
, ele executará a versão do seu shelltime
que não aceita argumentos.env time
:-)Se você precisar apenas de precisão para o segundo, poderá usar a
$SECONDS
variável embutida , que conta o número de segundos que o shell está executando.fonte
Você pode usar
time
e subshell()
:Ou no mesmo shell
{}
:fonte
(
&)
(novo contexto, subshell ) e outro com{
&}
(mesmo shell, mesmo contexto)O caminho é
saída é >>
fonte
-lphtread
ou-o
tags. Só precisa usar otime
comando, que a resposta aceita explica melhor.Um método possivelmente simples (que pode não atender às necessidades de diferentes usuários) é o uso do shell PROMPT.it é uma solução simples que pode ser útil em alguns casos. Você pode usar o recurso de prompt do bash como no exemplo abaixo:
O comando acima resultará na alteração do prompt do shell para:
Cada vez que você executa um comando (ou pressiona enter) retornando ao prompt do shell, o prompt exibirá a hora atual.
notas:
1) lembre-se de que, se você esperou algum tempo antes de digitar seu próximo comando, esse tempo precisa ser considerado, ou seja, a hora exibida no prompt do shell é o carimbo de data e hora em que o prompt do shell foi exibido, não quando você digita o comando. alguns usuários optam por pressionar a tecla Enter para obter um novo prompt com um novo registro de data e hora antes de estarem prontos para o próximo comando.
2) Existem outras opções e modificadores disponíveis que podem ser usados para alterar o prompt do bash, consulte (man bash) para obter mais detalhes.
fonte