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.