LoginSignup
5
4

More than 5 years have passed since last update.

シェルスクリプトでのLTSV出力イディオム

Last updated at Posted at 2016-03-22

ログの出力がLTSVだと色々できるようになってきてますね(若干遅い)。

スクリプトからログ出力って多いとは思うのですが、そこでのLTSV出力の比較的楽な方法が微妙です。
で、あれこれ頑張った結果から、エッセンスを抽出してイディオム化してみました。

たぶん車輪の再発明なんでしょうけども...

#!/bin/bash

cat << EOS | tr '\n' '\t' | sed -e 's/\t*$//' >> ${log}
name:${app}
time:$(date --iso-8601=seconds)
pid:$$
args:"${*}"
EOS
echo "" >> ${log}

# このスクリプトで、ログには自分自身(の名前/)PIDを出しているが
# 実行した(コマンド名/)ステータス/PIDとするなら以下のような行を入れる
# 直前に実行したコマンド(同期実行)のステータス(ex test -f <file>)
status:$?
# 直前に実行したコマンド(非同期実行)のPID(ex.make &)
pid:$!
  1. ヒアドキュメントで、変数展開を利用する。
  2. そこで要素ごとに改行して記述
  3. 1行1要素なので楽(LTSVなので順序はまあ重要ではないので、そこは都合に合せてよい)
  4. ラベルについては、タブやコロンを含まないようにするのは自前
  5. 改行されている要素をtrコマンドでタブにして1行に連結
  6. 最後のタブは一応削除(ツールによっては誤動作するかも、なので)
  7. 上記によく使う、アプリ名(これの定型ってあんまりないな)、日時、プロセスID(スクリプトだけど)、引数を載せた
  8. 最後に改行が必要なのでecho、ただbashとしてはここの方法でLFをsedで入れてしまってもいいかも

あとは必要な要素を追加すればよさげ。

サンプルの結果


name:testapp    time:2016-03-22T16:59:42+0900   pid:3031        args:"1 2 3"
name:testapp    time:2016-03-22T16:59:46+0900   pid:3036        args:"4 5 6"
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4