Como o OSX é um sistema BSD-ish, a biblioteca strftime não possui %N
( link )
O comando bash builtin time
fornece as informações necessárias?
time some work here
Eu verifiquei this , mas a solução fornecida não funcionou para mim.
Usando a data, 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 tento isso:
T="$(date +%s%N)"
#some work here
T="$(($(date +%s%N)-T))"
Adicionando% N (como acima) à data para obter a precisão nano-segundo, recebo o seguinte erro: -bash: 1369320760N: valor muito grande para a base (token de erro é "1369320760N")
Alguém sabe como medir o tempo de execução em milissegundos usando o bash no Mac OS X?
Como o OSX é um sistema BSD-ish, a biblioteca strftime não possui %N
( link )
O comando bash builtin time
fornece as informações necessárias?
time some work here
Eu seguiria esse caminho se eu precisasse de milissegundos e o BSD não suportasse data +%s%N
perl -MTime::HiRes -e 'printf("%.0f\n",Time::HiRes::time()*1000)'
echo $(($(date +%s%N)/1000000))
Isso converteria de nano segundos para milissegundos.
De @mpy, date +%s.%N
funciona.
A saída é diferente entre o linux e o OS X embora:
linux: 1369322592.573787111
OS X: 1369322610.N
Como a outra resposta mencionada, 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 comando para eles:
time (sleep 0.1; echo a; sleep 0.1)
time { sleep 0.1; echo a; sleep 0.1; }
Ou some os tempos de comandos individuais:
$ time=$(TIMEFORMAT=%R; (time sleep 0.1; echo a) 2>&1 > /dev/null)
$ time+=+$(TIMEFORMAT=%R; (time sleep 0.1) 2>&1)
$ bc <<< $time
.206
Ou use alguma linguagem de script:
$ ruby -e 'puts "%.3f" % Time.now'
1369329611.046
$ time ruby -e '""'
0.029
$ time ruby -e 'puts "%.3f" % Time.now'
1369329622.943
0.029
%.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.
Glenn está certo, time
é o comando que você está procurando, mas para analisar a informação que você quer, você precisará passá-lo para algum outro processador como sed
.
time command-goes-here >/dev/null 2>$1|sed rules-go-here
Este comando eliminará a saída do próprio comando (enviando saídas padrão e de erro para / dev / null) e passará os resultados de tempo para sed, onde você precisará escolher as regras apropriadas para editar o fluxo e imprima o valor desejado.
Se você instalar o coreutils
, poderá usar o GNU Linux date
escrevendo gdate
.
coreutils está disponível no Homebrew: brew install coreutils
.