Bashスクリプトの実行にかかった時間(日/分/秒)

Bashスクリプトの実行にかかった時間(日/分/秒)

実際にスクリプトが完了するのにかかる時間を推定したいとき。

startdate=$date

stuffs

enddate=$date

私はこれら2つの日付の違いを知りたいです。通常、スクリプトは1週間以内に完了します。だから日数と分が必要です。

答え1

bashマニュアルから:

SECONDS

このパラメーターが参照されるたびに、シェルが呼び出されてからの秒数が返されます。値がに割り当てられている場合、 SECONDS後続の参照によって返される値は、割り当て後の秒数に割り当てられた値を加算した値です。設定しないと、SECONDS後でリセットしても特殊属性が失われます。

したがって、秒を計算するタイマーを使用してコードスニペットの時間を測定したい場合は、次のようにします。

SECONDS=0

# code goes here

t=$SECONDS

$tこの値の日数と分数を印刷するには、次のようにします。

printf 'Time taken: %d days, %d minutes\n' "$(( t/86400 ))" "$(( t/60 - 1440*(t/86400) ))"

答え2

また:time bash script.sh

答え3

タイムスタンプが利用可能date "+%s"

$ date "+%s"
1590502845

bashを使って$(())計算します。

START=$(date "+%s")

work ... work... work ...

END=$(date "+%s")

echo $((END-START))

答え4

hh:mm:ssほとんどの回答には時間を形式で取得する簡単な方法はありません。

簡単に保ち、Bashの組み込み機能のみを使います。

# Using the Bash built-in SECONDS
SECONDS=0;sleep 0; t=$((SECONDS+241));TT=$(date -u -d "@${t}" +%T); printf 'Time taken: %s\n' "$TT"
# Time taken: 00:04:01

# Using date differences, and give result in hh:mm:ss
S=$(date -u +"%s"); E=$((S+121)); TT=$((E-S)); date -u -d "@${TT}" +%T
# 00:02:01

関連情報