web-dev-qa-db-ja.com

経過時間をbashで取得する

スクリプトのある時点で以下を実行したいと思います。

start_time=date

そして、これはプロセスが実行された後:

end_time=date

そしてこれを行います:

elapsed=$end_time-$start_time
echo "Total of $elapsed seconds elapsed for process"

どうすればいいですか?

13
Oliver Williams

エポック以降の時間を使用して、スクリプト内の期間を簡単に特定する

man date
%s     seconds since 1970-01-01 00:00:00 UTC
%N     nanoseconds (000000000..999999999)

start_time="$(date -u +%s)"
sleep 5
end_time="$(date -u +%s)"

elapsed="$(($end_time-$start_time))"
echo "Total of $elapsed seconds elapsed for process"

 Total of 5 seconds elapsed for process

Bashは浮動小数点数をサポートしていないため、1475705058.042270582-1475705053.040524971などの時間を比較するには、bcなどの外部ツールを使用する必要があります

start_time="$(date -u +%s.%N)"
sleep 5
end_time="$(date -u +%s.%N)"

elapsed="$(bc <<<"$end_time-$start_time")"
echo "Total of $elapsed seconds elapsed for process"

 Total of 5.001884264 seconds elapsed for process
16
Miati

bashには 組み込みタイマー変数 があります

start=$SECONDS
# do stuff
end=$SECONDS
duration=$(( end - start ))
echo "stuff took $duration seconds to complete"
19
glenn jackman

@jasonwryanはすでに提案しましたが、スクリプトの時間を計るときに私が頼りになるので、それを回答として投入します。時間を計るにはmyscript使用するだけです:

time myscript
6
sam