Eu verifiquei isso , mas a solução fornecida não funcionou para mim.
Usando date, posso obter o tempo de execução em segundos:
T="$(date +%s)"
#some work here
T="$(($(date +%s)-T))"
echo "execution time (secs) ${T}"
No entanto, quando eu tento isso:
T="$(date +%s%N)"
#some work here
T="$(($(date +%s%N)-T))"
Adicionando% N (como acima) à data para obter a precisão de nanossegundos, recebo o seguinte erro: -bash: 1369320760N: valor muito alto para a base (o token de erro é "1369320760N")
Alguém sabe como medir o tempo de execução em milissegundos usando o bash no Mac OS X?
# some work here
omitido, recebo tempos de 0,2 a 0,3 segundos - o que deve ser zero (ou pelo menos constante) para atingir seu objetivo. Considerando que/usr/bin/time usleep 50000
fornece um tempo estável razoável de 0,05 +/- 0,01 seg. (Apenas testado em Linux, não sei se / usr / bin / tempo e / ou usleep é acessível em OSX.)Respostas:
Como o OSX é um sistema BSD-ish, sua biblioteca strftime não possui
%N
( http://www.freebsd.org/cgi/man.cgi?query=date )O
time
comando bash builtin fornece as informações necessárias?fonte
Eu seguiria essa rota se precisasse de milissegundos e o BSD não suportasse a data
+%s%N
fonte
echo $(($(date +%s%N)/1000000))
Isso converteria de nanossegundos para mili-segundos.De @mpy,
date +%s.%N
funciona.A saída é diferente entre o linux e o OS X:
linux:
1369322592.573787111
OS X:
1369322610.N
fonte
date +%s.%N
(mas não posso verificar no OSX; está funcionando no Linux). Mas o problema é quebash
o$(( ))
IMHO não consegue lidar com números de ponto flutuante.Se você instalar,
coreutils
poderá usar o GNU Linuxdate
escrevendogdate
.coreutils está disponível com Homebrew:
brew install coreutils
.fonte
Como a outra resposta mencionou, a data do OS X não suporta% N (nanossegundos).
Você poderia salvar os comandos no tempo como um script? Ou use um subshell ou grupo de comandos para eles:
Ou some os tempos dos comandos individuais:
Ou use alguma linguagem de script:
%.3f
é um especificador de formato para um número de ponto flutuante com 3 pontos decimais. Time.now é um método de classe da classe Time.fonte
ruby -e 'puts "%.3f" % Time.now'
,ruby
chama o intérprete ruby,-e
executa o script a seguir na linha de comando.puts
é rubyprintf
(tipo de),Time
é um objeto ruby eTime.now
é o segundo desde a época. Usando%.3f
guarnições a saída 3 casas decimais, que é milissegundos (os ".046" e" 0,943" partes da saída.)time
é uma ferramenta de linha de comando que calcula quanto tempo leva para executar o comando a seguir. Vejaman time
para mais detalhes.Glenn está certo,
time
é o comando que você está procurando, mas, para analisar as informações desejadas, será necessário repassá-las para algum outro processador, comosed
.time command-goes-here >/dev/null 2>$1|sed rules-go-here
Este comando se livra da saída do próprio comando (enviando as saídas padrão e de erro para / dev / null) e passa os resultados de tempo para sed, onde você precisará escolher as regras apropriadas para editar o fluxo e a saída o valor desejado.
fonte