dreamedge.net

GNU Screenのcaptionにコマンドの出力結果を表示する

2009-09-29T21:10:00+0000

backtickを使うことによって,何らかのコマンドの出力をcaptionに表示できる.
具体的には,.screenrcの中に”backtick id lifespan autorefresh cmd args …”という形で実行するコマンドを書き込んで,captionの設定中で”%id`”で参照する.

backtick 0 0 10 date -u
caption always "%0`"

この場合id=0, lifespan=0, autorefresh=10という設定で,”date -u”を実行する指定になる.結果として10秒に1度captionに時刻が更新されるようになる.

このlifespanとautorefreshの関係が理解しづらいのだが,
lifespanは前にコマンドを実行した内容が,有効でなくなるまでの時間.
autorefreshはcaptionの内容を再作成して更新する時間.
なので,autorefreshの時刻が来ときに前にコマンドを実行してからlifespan以上の秒数が立っていると,コマンドは再実行されているので表示内容が変わる.

lifespan=5, autorefresh=3の場合

            0    5   10   15
   lifespan |----|----|----|
autorefresh |--|--|--|--|--|
            o  x  o  x  o  o

3秒と9秒でのrefreshでは,lifespanが切れてないのでコマンドは実行されない

lifespan=3, autorefresh=5の場合

   lifespan |--|--|--|--|--|
autorefresh |----|----|----|
            o    o    o    o

どのrefresh時点でもlifespanが切れてるのでコマンドが実行される

こんなこと考えるのは面倒くさいので,更新したい秒数があるならlifespan, autorefreshの両方にそれを設定しておけばいい.