背景
- 既存のShell Scriptをちょっと改変して実際の実行時間を出力したい。
- 後でちょっと集計したいから標準出力に時間だけを出力したい。
- ミリ秒くらいの粒度で測定したい。
実装
start_time=$(date +"%s.%3N")
$command > /dev/null
end_time=$(date +"%s.%3N")
echo "scale=1; $end_time - $start_time" | bc
%3N
はミリ秒の上位3桁をとる date
のフォーマット指定子です。BSD版ではこの指定子は使えないので、Macの場合はHomebrewで coreutils
をインストールして gdate
コマンドを使います。
所感
date
コマンドでミリ秒を指定するフォーマットや、BASHで小数を計算する方法など、まだまだ知らないことばかりです。