プログラムの実行時間を測定して変数に保存する方法

プログラムの実行時間を測定して変数に保存する方法

timeBash(v4 +)スクリプトの特定の操作にかかる時間を確認するために、コマンドの出力を「別々に」解析して(最終的に)let VARNAME=...Bash変数()にキャプチャしたいと思います。

time -f '%e' ...私は(または組み込みのBashのために)使用していますが、command time -f '%e' ...実行されたコマンドの出力をリダイレクトしたので、コマンドの出力をキャプチャする方法がわかりませんtime。基本的にここで問題は別々の出力timeコマンド実行の出力です。

私が望むもの特徴開始コマンドと完了の間の秒数を計算します。time必ずしもコマンドや対応する組み込みコマンドである必要はありません。


編集する:以下の2つの有用な答えに基づいて、2つの説明を追加したいと思います。

  1. 実行されたコマンドの出力を破棄したくありませんが、それがstdoutで終わってもstderrで終わっても構いません。
  2. 私は間接的なアプローチ(つまり、出力を中間ファイルに保存する代わりに直接キャプチャする)よりも直接的なアプローチを好みます。

これまで使用されているソリューションは、date私が望むソリューションに近いです。

ベストアンサー1

出力をtimevarに入れるには、次のコマンドを使用します。

usr@srv $ mytime="$(time ( ls ) 2>&1 1>/dev/null )"
usr@srv $ echo "$mytime"

real    0m0.006s
user    0m0.001s
sys     0m0.005s

utimeなどの単一の時間タイプのみを要求できます。

usr@srv $ utime="$( TIMEFORMAT='%lU';time ( ls ) 2>&1 1>/dev/null )"
usr@srv $ echo "$utime"
0m0.000s

時間を取得するには、次を使用してdate +%s.%N実行前後の時間を取得し、差を計算することもできます。

START=$(date +%s.%N)
command
END=$(date +%s.%N)
DIFF=$(echo "$END - $START" | bc)
# echo $DIFF

おすすめ記事