screen の backtick をいつか使う
screen には backtick というのがあって、プログラムの出力を caption か hardstusに表示できる。
screen の設定で
backtick 0 0 0 プログラム プラグラム引数
とすると %0` の値がプログラムの最後の出力になる。例えば、
hardstatus alwayslastline "%{=b}%0`"
のように利用する。
いつも何か出力があると気が散るので、使うときのために準備だけしておく。
screen の設定で
backtick 0 0 0 perl $HOME/bin/read_backtick.pl
として、何か出力したいときは、backtick.txtに一行書き出せば、hardstatus に出力する。
echo 'Help me!!!' > ~/tmp/backtick.txt
問題は20秒おきにstatを実行してしまうことなんだけど、面倒なのでいいことにする。出力プログラムにtail -f を使ってもいいけど、tail -f もファイルサイズを定期的に監視しているので負荷的には同じだろう。
#!/usr/bin/perl use strict; use warnings; use IO::File; my $tick = shift || 20; my $file = shift || "$ENV{HOME}/tmp/backtick.txt"; my $last_mtime = undef; while (1) { my $mtime = ( stat $file )[9]; if ( !defined $mtime ) { if ( defined $last_mtime ) { # Delete file. Clear backtick print $/; (*STDOUT)->flush; } else { # Deleted file already } $last_mtime = $mtime; } elsif ( !defined($last_mtime) or ( $mtime != $last_mtime ) ) { if ( open my $fh, '<', $file ) { my $line = <$fh>; $line =~ s/\x0D?\x0A?$//; print $line, $/; (*STDOUT)->flush; $last_mtime = $mtime; close $fh; } } sleep $tick; }