スクリプト内の時間の測定


8

このスレッドは、スクリプトの実行にかかる時間を測定する方法を示しています。私の場合、スクリプト内の2点間の時間を測定することに興味が あります。これが私がこれをどのように使用したいかの例です:

start_measuring_time
Line 1
Line 2
..
Line N
stop_measuring_time
show_elapsed_time

可能であれば、表示される時間を人間が読めるようにしたい(秒、分、時間、日など)。これを行う方法はありますか?

回答:


7

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

これは、エラーを生成します:開始時間と終了時間は秒+ナノ秒と解釈する必要は一緒ではなく、個別に-あなたはそれ以外の場合は負の値のようなものを得ることができます。
rozcietrzewiacz

1
これを解決する方法については、この質問に対する私の回答を参照してください。
rozcietrzewiacz

完全に正しい答えではないため、私は反対票を投じなければなりませんでした。正しい正の値が時々負の値を返しますが、質問の前Tend-Tstart と後にエコーを入れないのはなぜ$(
ですか

11

あなたは単に使うことができますtime

time (
Line 1
Line 2
..
Line N
)

時間の出力はそのまま人間が読めると思いますが、スクリプトで日数などを測定するman time場合は、出力のフォーマットオプションを確認してください。


ありがとう@frabjous!@enzotibの答えを受け入れると思います。これにより、一般的な制御フロー(つまり、線形フローだけでなく)で時間を測定できるようになります。
Amelio Vazquez-Reina

1

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.