Saya ingin melakukan skrip bash yang mengukur waktu peluncuran browser untuk itu saya menggunakan html yang mendapat cap waktu di-load dalam milidetik menggunakan JavaScript.
Dalam skrip shell tepat sebelum saya memanggil browser saya mendapatkan cap waktu dengan:
date +%s
Masalahnya adalah ia mendapat cap waktu dalam hitungan detik, dan saya membutuhkannya dalam milidetik karena kadang-kadang ketika berjalan kedua kalinya browser mulai di bawah satu detik dan saya harus dapat mengukur waktu itu secara tepat menggunakan milidetik alih-alih detik.
Bagaimana saya bisa mendapatkan cap waktu dalam milidetik dari skrip bash?
sumber
$(($(date +'%s * 1000 + %N / 1000000')))
. Itu masih tidak masuk akal, tetapi akan lebih dapat diandalkan.%N
tidak tersedia di BSD dan OS X.echo $(( $(date '+%s%N') / 1000000))
?Dengan GNU atau implementasi ast-open
date
(atau busybox 'jika dibangun denganFEATURE_DATE_NANO
opsi diaktifkan), saya akan menggunakan:yang mengembalikan milidetik sejak zaman Unix.
sumber
%3N
apakah bantalan nol kiri yang diperlukan (tanpa membaca dokumen. ;-), Anda dapat melakukannyawhile sleep 0.05; do date +%s%3N; done
, dan ya, nol yang diperlukan ada di sana.%3N
memang nol empuk. Selain itu saya tidak berpikir solusi Anda akan menambah nol, cukup tunda respons yang sangat sedikit.%3N
memang 0-empuk.Seandainya ada orang yang menggunakan cangkang selain
bash
,ksh93
danzsh
memiliki$SECONDS
variabel floating point jika Anda melakukantypeset -F SECONDS
yang dapat berguna untuk mengukur waktu dengan akurat:Sejak versi 4.3.13 (2011)
zsh
memiliki$EPOCHREALTIME
variabel floating point khusus dalamzsh/datetime
modul:Perhatikan bahwa itu berasal dari dua bilangan bulat (untuk detik dan nanodetik) yang dikembalikan oleh
clock_gettime()
. Pada kebanyakan sistem, itu lebih presisi daripada yangdouble
bisa dimiliki oleh angka C floating point tunggal , sehingga Anda akan kehilangan presisi ketika Anda menggunakannya dalam ekspresi aritmatika (kecuali untuk tanggal dalam beberapa bulan pertama tahun 1970).Untuk menghitung perbedaan waktu presisi tinggi (meskipun saya ragu Anda akan membutuhkan lebih dari presisi milidetik), Anda mungkin ingin menggunakan
$epochtime
array khusus sebagai gantinya (yang berisi detik dan nanodetik sebagai dua elemen terpisah).Sejak versi 5.7 (2018)
strftime
shell builtin juga mendukung%N
format nanodetik à la GNUdate
dan a%.
untuk menentukan presisi, sehingga jumlah milidetik sejak zaman juga dapat diambil dengan:(atau disimpan dalam variabel dengan
-s var
)sumber
Untuk menghindari perhitungan untuk mendapatkan milidetik, penerjemah baris perintah JavaScript dapat membantu:
Paket-paket yang mengandung juru bahasa itu di Ubuntu Eoan:
sumber
Di bash 5 + ada variabel dengan rincian mikro-detik:
$EPOCHREALTIME
.Begitu:
Mencetak waktu sejak zaman (1/1/70) dalam milidetik.
Gagal itu, Anda harus menggunakan tanggal. Entah tanggal GNU:
Salah satu alternatif yang tercantum di https://serverfault.com/a/423642/465827
Atau
brew install coreutils
untuk OS XAtau, jika semuanya gagal, kompilasi (gcc epochInµsec.c) program c ini (sesuaikan sesuai kebutuhan):
Perhatikan bahwa memanggil program eksternal apa pun perlu waktu untuk dibaca dan dimuat dari disk, mulai, jalankan dan akhirnya untuk mencetak hasilnya. Itu akan membutuhkan beberapa milidetik. Itu adalah ketepatan minimum yang dapat dicapai dengan alat eksternal apa pun (termasuk tanggal).
sumber