2008年1月20日日曜日

新着メールが届いたらscreenに知らせる -Xオプション

screen上で作業中に新着メールが届いたら、screenに知らせるっ、便利ですぅ。
動作中のscreenでコマンドを実行するには、screenの-Xオプションを使えば簡単に実現できますね。

screen -X bell_msg "New Mail New Mail!"
screen -X bell
これで現在起動しているscreen のWindowの右隅、ちぃっちゃくメッセージが5秒間出て消えます。

screenのセッションが現在のホスト上に複数立ち上がっていると-Xオプションがエラーを返します。
screenは、セッション名(sessionname)、WindowID(番号またはタイトル)で状態を管理しています。セッション名は、pid.tty.hostです(pidは省略可)。現在のホスト上にあるscreenのセッションリストは、screen -lsで表示されます(存在しない場合1を返します)。特定のセッションを選択してコマンドを送信するためには-Sオプションでセッション名を指定します。

screen -S pid.tty.host -X bell_msg "New Mail New Mail!"
sceen -S pid.tty.host -X bell

すべてのセッションにメッセージを送るには、
[hogemailyo]
#!/bin/csh -f
foreach s (`screen -ls|awk '{print $1;}'|grep "\.")
screen -S $s -X bell_msg "$*"
screen -S $s -X bell
end
こんな感じになります。

私はfetchmailが新着メールを受け取ったとき、procmailへ振り分けたりしていますので、

[procmail_with_screen_bell.shスクリプト]
#!/bin/csh -f
cat | procmail
foreach sss (`screen -ls | egrep '[0-9]+\..+\..+' | awk '{print $1}'`)
screen -S $sss -X bell_msg "New Mail Comes!"
screen -S $sss -X bell_msg
end

のようなprocmailのラッパ・スクリプトを作っておいて、fetchmailから新着メールを渡すように、.fetchmailrcのmdaの部分を

[.fetchmailrc内]
mda "procmail_with_screen_bell.sh"

としてしまいます。
これで、
fetchmailが新着メールを受け取り、procmail_with_screen_bell.shスクリプトへ渡す
procmail_with_screen_bell.shがprocmailへメールを渡す
procmail_with_screen_bell.shがscreenへメッセージを表示する


メールが届くと、左下にちぃッちゃく、"New Mail Comes!"と表示されますねぇ。

0 件のコメント: