screen の他のウィンドウの結果をとりだす screen-pipe コマンド
複数ホストに ssh しながら tail -F するときにはこうしたらどう?という話の続きです。
どうしても映画に出てくるようなハッカーになりたいのであったが、オールドタイプなので既存の UNIX tools をくみあわせて最強の環境の構築にはげむ僕がいます。
以下のようなツールをもちいまして、任意の window の出力を現在のウィンドウから出力させます。
#!/usr/bin/env perl use strict; use warnings; use utf8; use 5.010000; use autodie; use File::Temp qw/tempfile/; my $window = shift @ARGV || 1; my ($tmpfh, $tmpfname) = tempfile(UNLINK => 1); warn $window; system( qq{screen -X eval 'select $window' 'log off' 'logfile $tmpfname' 'logfile flush 1' 'log on'}) == 0 or die; system(qq!screen -X eval "select $ENV{WINDOW}"!); exec 'tail', '-F', $tmpfname;
で、こういう風にしてとりだした結果をもとに
grep -B ' 500 '
とか
grep ' 404 '
とか一個の踏み台サーバーからログをぶっこぬいてきておいて、それを複数のウィンドウにことなる条件で grep かけたものなどを眺めることが可能となります。
この方法の問題点は、ディスクにどんどん書いてしまうことですね。screen の限界をビンビンに感じます。tmux なら pipe-pane とかつかってもっとスマートにできそうです。truncate とかできればいいんですが、なんかいろいろめんどくさそうです。
あと、そんなにたいした量のデータはたまらないのでまあ我慢できないこともないかな、なんておもったり。
tmux で同様のことをするプログラム、だれか書いてくれませんかな?