Mengukur waktu dalam skrip


8

Utas ini menunjukkan cara mengukur waktu yang diperlukan untuk menjalankan skrip. Dalam kasus saya, saya tertarik untuk mengukur waktu antara dua titik dalam sebuah skrip . Berikut adalah contoh bagaimana saya ingin menggunakan ini:

start_measuring_time
Line 1
Line 2
..
Line N
stop_measuring_time
show_elapsed_time

Saya ingin waktu yang ditampilkan agar dapat dibaca manusia (dtk, mnt, jam, hari, dll.), Jika memungkinkan. Ada ide bagaimana melakukan ini?

Jawaban:


7

Anda dapat menggunakan dateutil:

#!/bin/bash

start_measuring_time() {
  read s1 s2 < <(date +'%s %N')
}

stop_measuring_time() {
  read e1 e2 < <(date +'%s %N')
}

show_elapsed_time() {
  echo "$((e1-s1)) seconds, $((e2-s2)) nanoseconds"
}

start_measuring_time
sleep 2
stop_measuring_time
show_elapsed_time

Ini akan menghasilkan kesalahan: waktu awal dan akhir harus ditafsirkan sebagai detik + nanodetik bersama , tidak secara terpisah - Anda bisa mendapatkan hal-hal seperti nilai negatif jika tidak.
rozcietrzewiacz

1
Lihat jawaban saya untuk pertanyaan ini untuk cara mengatasi ini.
rozcietrzewiacz

Saya harus mengundurkan diri karena jawabannya tidak sepenuhnya benar, benar itu memberikan nilai negatif di kali tetapi dalam pertanyaan Anda mengapa Anda tidak menempatkan gema sebelum Tend-Tstart dan sesudah$(
munish

11

Anda bisa menggunakan time:

time (
Line 1
Line 2
..
Line N
)

Saya pikir output waktu dapat dibaca manusia seperti apa adanya, tetapi jika skrip Anda akan diukur dalam beberapa hari, dll., Lalu periksa man timeuntuk opsi format untuk output.


Terima kasih @frabjous! Saya pikir saya akan menerima jawaban @ enzotib karena memungkinkan saya untuk mengukur waktu dalam aliran kontrol umum (yaitu tidak hanya dalam aliran linier).
Amelio Vazquez-Reina

1

Contoh untuk mencoba timerscript.sh:

#!/bin/bash

#timing in minutes with %m
start=`date +%m`
echo 'Start:' $start
#do something e.g. wait for 1.30 minutes 
sleep 90

`end=`date +%m`
echo 'End: '$end
echo 'runtime: '$runtime
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.