スクリプトの実行時間を効果的に取得するには?

スクリプトの実行時間を効果的に取得するには?

スクリプトの完了時間を表示したいです。

私が今やっていることは -

#!/bin/bash
date  ## echo the date at start
# the script contents
date  ## echo the date at end

これはスクリプトの開始時刻と終了時刻を示しています。プロセッサ時間/IO時間など、細かい出力を表示できますか?

答え1

timeスクリプトを呼び出すときに使用してください。

time yourscript.sh

答え2

timeオプションでない場合、

start=`date +%s`
stuff
end=`date +%s`

runtime=$((end-start))

または1秒未満の精度が必要で、それをbc取り付けた場合

start=`date +%s.%N`
stuff
end=`date +%s.%N`

runtime=$( echo "$end - $start" | bc -l )

答え3

ただ電話してくださいtimesパラメータなしでスクリプトを終了します。

kshまたは で代わりにzsh使用することもできますtime。ウォールクロック時間も提供されますzshtimeユーザーそしてシステムCPU時間。

スクリプトの終了状態を維持するには、次のようにします。

ret=$?; times; exit "$ret"

または、トラップを追加することもできますEXIT

trap times EXIT

この方法では、シェルが終了するたびにtimesが呼び出され、終了状態が維持されます。

$ bash -c 'trap times EXIT; : {1..1000000}'
0m0.932s 0m0.028s
0m0.000s 0m0.000s
$ zsh -c 'trap time EXIT; : {1..1000000}'
shell  0.67s user 0.01s system 100% cpu 0.677 total
children  0.00s user 0.00s system 0% cpu 0.677 total

また、bash両方ともksh毎秒自動的に増加する特別な変数zshがあることに注意してください。$SECONDSsumsでは、zshこのksh93変数は精度を上げるために浮動小数点数(有効)に設定することもできますtypeset -F SECONDS。これはCPU時間ではなく壁時計時間です。

答え4

少し遅れましたが、他の人が検索でこのスレッドを偶然見つけた場合に備えて、私のソリューション(1秒未満の精度)を投稿したかったのです。出力形式は日、時間、分、最後の秒です。

res1=$(date +%s.%N)

# do stuff in here

res2=$(date +%s.%N)
dt=$(echo "$res2 - $res1" | bc)
dd=$(echo "$dt/86400" | bc)
dt2=$(echo "$dt-86400*$dd" | bc)
dh=$(echo "$dt2/3600" | bc)
dt3=$(echo "$dt2-3600*$dh" | bc)
dm=$(echo "$dt3/60" | bc)
ds=$(echo "$dt3-60*$dm" | bc)

LC_NUMERIC=C printf "Total runtime: %d:%02d:%02d:%02.4f\n" $dd $dh $dm $ds

誰かがこれが役に立つと思います!

[編集] bash printfでフィールド定義のすべての文字を計算する必要があります。秒を点の前の2桁まで埋めるには、次のように定義する必要があります%07.4f(すべての数字と粘度はフィールドの長さとして計算されます)。したがって、行は次のようになります。 LC_NUMERIC=C printf "Total runtime: %d:%02d:%02d:%07.4f\n" $dd $dh $dm $ds

関連情報