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?

Amelio Vazquez-Reina
sumber

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
enzotib
sumber
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.

luar biasa
sumber
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
Jorduino
sumber