Quero fazer um script bash que meça o tempo de inicialização de um navegador, pois estou usando um html que obtém o carimbo de data e hora em carga em milissegundos usando JavaScript.
No script shell, pouco antes de ligar para o navegador, recebo o carimbo de data / hora com:
date +%s
O problema é que ele obtém o registro de data e hora em segundos, e eu preciso dele em milissegundos, já que, às vezes, quando é executado pela segunda vez, o navegador inicia em menos de um segundo e preciso poder medir esse tempo com precisão usando milissegundos em vez de segundos.
Como posso obter o carimbo de hora em milissegundos a partir de um script bash?
fonte
$(($(date +'%s * 1000 + %N / 1000000')))
. Isso ainda não faz muito sentido, mas seria mais confiável.%N
não está disponível no BSD e no OS X.echo $(( $(date '+%s%N') / 1000000))
?Com a implementação GNU ou ast-open de
date
(ou busybox 'se criada com aFEATURE_DATE_NANO
opção ativada), eu usaria:que retorna milissegundos desde a época do Unix.
fonte
%3N
que o preenchimento zero necessário é deixado à esquerda (sem ler os documentos. ;-), você pode fazerwhile sleep 0.05; do date +%s%3N; done
, e sim, os zeros necessários estão lá.%3N
é de fato zero preenchido. Além disso, não acho que a sua solução adicione zeros, apenas adie a resposta para tão pouco.%3N
se realmente é preenchido com 0.Caso alguém esteja usando outras conchas além de
bash
,ksh93
ezsh
tenha uma variável de ponto flutuante$SECONDS
, se você fizer umatypeset -F SECONDS
que possa ser útil para medir o tempo com precisão:Desde a versão 4.3.13 (2011),
zsh
há uma$EPOCHREALTIME
variável especial de ponto flutuante nozsh/datetime
módulo:Observe que isso é derivado dos dois números inteiros (por segundos e nanossegundos) retornados por
clock_gettime()
. Na maioria dos sistemas, isso é mais preciso do que um únicodouble
número de ponto flutuante C pode suportar; portanto, você perderá a precisão ao usá-lo em expressões aritméticas (exceto para datas nos primeiros meses de 1970).Para calcular diferenças de tempo de alta precisão (embora eu duvide que você precise mais do que milissegundos de precisão), convém usar a
$epochtime
matriz especial (que contém os segundos e os nanossegundos como dois elementos separados).Desde a versão 5.7 (2018), o
strftime
shell interno também suporta um%N
formato de nanossegundo à GNUdate
e a%.
para especificar a precisão, portanto, o número de milissegundos desde a época também pode ser recuperado com:(ou armazenado em uma variável com
-s var
)fonte
Para evitar cálculos para obter os milissegundos, os intérpretes JavaScript da linha de comandos podem ajudar:
Pacotes que contêm esses intérpretes no Ubuntu Eoan:
fonte
Em festa 5+ não é uma variável com micro-segundo granularidade:
$EPOCHREALTIME
.Tão:
Imprime o tempo desde a época (1/1/70) em milissegundos.
Na sua falta, você deve usar a data. A data do GNU:
Uma das alternativas listadas em https://serverfault.com/a/423642/465827
Ou
brew install coreutils
para OS XOu, se tudo mais falhar, compile (gcc epochInµsec.c) este programa c (ajuste conforme necessário):
Observe que a chamada para qualquer programa externo precisa de tempo para ser lida e carregada do disco, iniciada, executada e, finalmente, para imprimir a saída. Isso levará vários milissegundos. Essa é a precisão mínima que poderia ser alcançada com qualquer ferramenta externa (incluindo a data).
fonte