Đo thời gian trong một kịch bản


8

Chủ đề này cho thấy làm thế nào để đo thời gian cần thiết để chạy một kịch bản. Trong trường hợp của tôi, tôi quan tâm đến việc đo thời gian giữa hai điểm trong một tập lệnh . Đây là một ví dụ về cách tôi muốn sử dụng này:

start_measuring_time
Line 1
Line 2
..
Line N
stop_measuring_time
show_elapsed_time

Tôi muốn thời gian hiển thị là có thể đọc được của con người (giây, phút, giờ, ngày, v.v.), nếu có thể. Bất kỳ ý tưởng làm thế nào để làm điều này?

Câu trả lời:


7

Bạn có thể sử dụng tiện dateích:

#!/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

Điều này sẽ tạo ra lỗi: đầu và thời gian kết thúc cần phải được hiểu là giây + nano giây cùng nhau , không riêng - bạn có thể nhận được những thứ như giá trị tiêu cực khác.
rozcietrzewiacz

1
Xem câu trả lời của tôi cho câu hỏi này để biết cách giải quyết vấn đề này.
rozcietrzewiacz

Tôi đã phải downvote kể từ khi câu trả lời không hoàn toàn hài lòng chính xác của nó, sửa chữa nó mang lại giá trị âm vào những thời điểm nhưng trong câu hỏi của bạn tại sao bạn không đặt tiếng vang trước Tend-Tstart và sau$(
Munish

11

Bạn chỉ có thể sử dụng time:

time (
Line 1
Line 2
..
Line N
)

Tôi nghĩ rằng đầu ra của thời gian có thể đọc được như con người, nhưng nếu tập lệnh của bạn sẽ đo bằng ngày, v.v., thì hãy kiểm tra man timecác tùy chọn định dạng cho đầu ra.


Cảm ơn @frabjous! Tôi nghĩ rằng tôi sẽ chấp nhận câu trả lời của @ enzotib vì nó cho phép tôi đo thời gian trong các luồng điều khiển chung (nghĩa là không chỉ trong các luồng tuyến tính).
Amelio Vazquez-Reina

1

Mẫu để thử 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.