ログの出力が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行1要素なので楽(LTSVなので順序はまあ重要ではないので、そこは都合に合せてよい)
- ラベルについては、タブやコロンを含まないようにするのは自前
- 改行されている要素をtrコマンドでタブにして1行に連結
- 最後のタブは一応削除(ツールによっては誤動作するかも、なので)
- 上記によく使う、アプリ名(これの定型ってあんまりないな)、日時、プロセスID(スクリプトだけど)、引数を載せた
- 最後に改行が必要なので
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"