よっしー
こんにちは。よっしーです(^^)
今日は、シェルの実行結果を保存する方法についてご紹介します。
背景
シェルの実行結果を保存する機会があったので、そのときの内容を備忘として残しました。
この記事のソースは下記のサイトにアップしています。
実行環境について
実行環境は下記の記事を参考にお願いします。
作成ファイル一覧
下記のファイルを作成しました。
new file: local/work/01_gen_out_dir/01_gen_out_dir.sh
01_gen_out_dir.sh
#!/bin/bash
run_time=$(TZ=JST-9 date "+%Y%m%d_%H%M%S")
yyyy=${run_time:0:4}
mm=${run_time:4:2}
dd=${run_time:6:2}
HH=${run_time:9:2}
MM=${run_time:11:2}
SS=${run_time:13:2}
run_name=$(basename "$0")
run_name=${run_name%.*}
out_dir=${run_name}/${yyyy}/${mm}/${dd}/${HH}/${MM}/${SS}
echo "out : ${out_dir}"
mkdir -p "${out_dir}"
log=${out_dir}/out.log
echo "test" | tee -a "${log}"
動作確認
下記のコマンドを実行します。
make build
make up
make login
cd 01_gen_out_dir
bash 01_gen_out_dir.sh
下記の結果が出力されていれば成功です。
root@583e0ff56c7f:/work/01_gen_out_dir# bash 01_gen_out_dir.sh
out : 01_gen_out_dir/2023/12/03/18/34/18
test
解説
01_gen_out_dir.sh
このBashスクリプトは、以下の機能を持っています:
run_time
変数の設定:TZ=JST-9 date "+%Y%m%d_%H%M%S"
を実行して、日本標準時(JST)での現在の日時を “YYYYMMDD_HHMMSS” の形式で取得し、run_time
変数に格納しています。- 日時の要素を分割:
run_time
から年、月、日、時、分、秒をそれぞれyyyy
、mm
、dd
、HH
、MM
、SS
の変数に抽出しています。これにより、各要素を個別の変数に格納しています。 run_name
変数の設定:basename "$0"
を使って、スクリプトファイルの名前を取得し、拡張子を取り除いてrun_name
変数に格納しています。- 出力ディレクトリの作成: 各時間要素を含む階層構造のディレクトリパス
out_dir
を作成し、mkdir -p "${out_dir}"
を使ってディレクトリを作成しています。これにより、スクリプトを実行した時点の日時に基づいたディレクトリが作成されます。 - ログファイルのパスの設定:
log
変数に、out_dir
に “out.log” を追加したパスを格納しています。 echo "test" | tee -a "${log}"
: “test”という文字列を標準出力に表示し、同時に${log}
ファイルに追記します。tee -a
コマンドは標準入力から読み取った内容を指定したファイルに追記します。この場合、"${log}"
に “test”が追記されます。
最終的に、スクリプトはディレクトリの作成やログの書き込みなどを行い、結果として out.log
ファイルが ${out_dir}
ディレクトリに作成されます。ディレクトリ構造は日時に基づいています。
おわりに
今日は、シェルの実行結果を保存する方法についてご紹介しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント