Bashシェルスクリプトでログ出力をシンプルに実現する方法
はじめに
シェルスクリプトはお世辞にも読みやすいコードとは言えません。
なのでできる限りシンプルに、短く記述したいのですが、工夫をしないと ログ出力 処理がごちゃごちゃしてしまいます。
例えば、すべての出力、エラー出力をログとして保存しようとすると以下のような記述ができます。
実行結果は以下のようになります。
スクリプトが小さな間は良いのですが、大きくなってきた場合、このような記述が乱立していると非常に見にくいです。
もっと見やすくするための記述方法があります。
検証環境
1. exec
コマンドを利用する
exec
コマンドを利用することで、上記のようなログ出力処理をシンプルに記述できます。
先程のスクリプトを exec
コマンドを使ったシンプルな記述に書き換えてみます。
実行結果は以下のようになります。( 先程の一緒ですね。 )
コンソールとログファイルの両方に出力したい
コンソールとログファイルの両方に出力したい場合はどうしたらよいでしょう?
特に echo
などは意図的に出力しているメッセージであり、コンソールにも表示させたいところです。
tee
コマンドを組み合わせることで実現できます。
実行してみます。
ログにタイムスタンプを付与したい
実行結果は以下のようになります。
2. { ... }
構文を利用する
{ ... }
構文を利用してジョブをまとめ、標準出力と標準エラー出力を書き出す方法もあります。
実行結果は exec
を利用したものと同じです。
ひとこと
今までは { ... }
を使った方法を取ることが多かったのですが、インデントが必要なので、他にいい方法がないかと思っていたら、 exec
の方法を知りました。
勉強になりました。
ディスカッション
コメント一覧
まだ、コメントがありません