tanlog
最近、 tanlog というのを作って使っていて、割と便利なので紹介してみます。
https://github.com/shinh/test/blob/master/tanlog.rb
元々は同僚と、なんか端末に出たもの前もって lv とか tee に入れておくのって、忘れることあるし、 lv とか tee に流すと isatty が false になって色出ないのうざいよねえ…みたいな話をしてたように思います。 grep については fake_isatty とか作ったりしたんですが、この時 soda さんに仮想端末作ってやる方法があると教えてもらったのを思い出して、 script とかで記録しておいたら…とか話していました。
結果、その同僚は zenlog というのを作って便利になった、とか言ってたのですが、なんか Perl と bash 混じってるとか、コマンドの切れ目をプロンプトで教えるとか微妙…ということで自作したものです。 zenlog に対して tanlog なのはコマンド起動ごとになんかするからです。まあこういうのは人の作ったものを使うというよりはみんな勝手に作ればいい…
tanlog は screen/zsh と一緒に使うことが想定されていて、 preexec で tanlog start して precmd で tanlog end します。 tanlog start は screen のログファイルを指定して /tmp/tanlog/RAW の下に端末出力をダンプしはじめます。 tanlog end はその端末出力を綺麗にして /tmp/tanlog の下にコピーします。
このディレクトリの構造は適当に便利なようになっていて、
- /tmp/tanlog/2017-02-12: ログの実体がある場所
- /tmp/tanlog/TODAY: 今日のディレクトリへのシンボリックリンク
- /tmp/tanlog/TODAY/P: さっき実行したコマンドのログへのシンボリックリンク
- /tmp/tanlog/TODAY/PP: その前実行したコマンドのログへのシンボリックリンク
- /tmp/tanlog/make: makeコマンドのログへのシンボリックリンクがこの下にころがっている
- /tmp/tanlog/make/P: さっき実行した make のログへのシンボリックリンク
などと適当に便利そうなものが入っています。えーと llvm ビルドした時の cmake コマンドはどんな感じだったかな…とか思ったなら
wgrep llvm /tmp/tanlog/cmake/P*
なんてやってます。 wgrep てのは grep を w3m でラップした何かです。
あとは tanlog paths てすると最近実行したコマンドに含まれるパスとかURLぽいものがだーと出るので、それを w3m に喰わせる wl ていうのも使ったりしてます。コマンドが URL 出してくれたけど、それマウスとか screen とかでコピペするのめんどい、て時に使ってます。
https://github.com/shinh/test/blob/master/wl
そのまま他の人が使えるような形にはなってないと思いますが、 screen のログ機能なり script なり使って、とりあえずコマンドの実行結果を全部残しておく、てのはなかなか良いのではないかと思っています。 lv か tee 通すべきかな?とか一瞬逡巡するのが無くなります。実現がハッキーになりすぎるのが残念なところで、こういうことを色々便利にやってくれる screen つき shell みたいなの作りたいなぁとかいうことを割とずっと思っています。