本記事では、コマンドの実行時間を計測するシェルスクリプト measure_time.sh
を紹介します。
本コマンドの詳細
-
正しいシバン行とエラーチェック
スクリプト冒頭を#!/bin/bash
と正しく記述し、引数が渡されなかった場合には使用方法を表示して終了します。 -
柔軟なコマンド引数の受け取り
$@
を使用して、渡された全ての引数をそのままコマンドとして実行可能にし、複数の引数やオプションにも対応しました。 -
正確なタイムスタンプ取得
date +%s
を用いて、秒単位で開始時刻と終了時刻を取得し、計算処理をシンプルにしました。 -
実行時間の分解と表示
秒単位で得られた実行時間を「時間」「分」「秒」に変換し、見やすいフォーマットで出力します。 -
ログの追記とエラーハンドリング
実行結果(開始時刻、実行したコマンド、実行時間、終了ステータス)をログファイルに追記することで、後からの参照やデバッグが容易になるようにしました。
スクリプト
以下は、measure_time.sh
のコードです。
#!/bin/bash
# Usage: measure_time.sh <command> [arguments...]
# 引数がない場合は使用方法を表示して終了
if [ $# -eq 0 ]; then
echo "Usage: $0 <command> [arguments...]"
exit 1
fi
# ログファイルのパス(必要に応じて固定パスや環境変数で指定しても良い)
log_file="$(pwd)/record_exec_time.txt"
# 開始時間を取得
start_time=$(date +%s)
echo "[$(date)] 開始: $*"
# 渡されたコマンドを実行し、終了ステータスを取得
"$@"
exit_status=$?
# 終了時間を取得し、実行時間を計算
end_time=$(date +%s)
runtime=$(( end_time - start_time ))
hours=$(( runtime / 3600 ))
minutes=$(( (runtime % 3600) / 60 ))
seconds=$(( runtime % 60 ))
# 結果を表示
echo "実行時間: ${hours}時間 ${minutes}分 ${seconds}秒"
# ログに結果を追記(タイムスタンプ、コマンド、実行時間、終了ステータス)
echo "[$(date)] コマンド: $* | 実行時間: ${hours}時間 ${minutes}分 ${seconds}秒 | 終了ステータス: $exit_status" >> "$log_file"
# コマンドの終了ステータスで終了
exit $exit_status
実行手順
-
スクリプトの保存
~/Software
など、管理しやすいディレクトリに上記の内容をmeasure_time.sh
として保存します。 -
実行権限の付与
次のコマンドでスクリプトに実行権限を付与します。chmod +x ~/Software/measure_time.sh
-
パスを通す
任意のシェル起動時に、~/Software
ディレクトリが PATH に含まれるように設定します。
例えば、~/.bashrc
や~/.profile
に以下の行を追加してください。export PATH="~/Software:$PATH"
その後、以下のコマンドで変更を反映させます。
source ~/.bashrc
-
スクリプトの実行例
例として、10秒間待機するsleep 10
コマンドの実行時間を計測する場合は、以下のように実行します。measure_time.sh sleep 10
実行後、端末に実行時間が表示されるとともに、
record_exec_time.txt
にログが追記されます。
まとめ
今回は、実行時間計測スクリプトを紹介しました。コード開発において、そのコードを実行して終了するまでにどのくらいの時間を要したのかを確実に把握することは重要です。
エラーチェックや柔軟な引数処理、ログ出力機能により、コマンド実行の履歴管理やデバッグが容易になり、非常に役立つツールとなります。