最近、gitbub で iij/watch というコマンドがひっそりと公開されました。 管理者の yasuoka 君は以前の同僚で、このコマンドは2000年に一緒の部署で働いていた時にみんなで作ったものですね。 元々は BSD/OS に watch というコマンドがあって、ちょっと拡張しようといじってたら結局作り直しちゃったやつです。 ずっと社内で使っていたものを公開したのには何か理由があるようですが、詳しいことは知りません。
このコマンドの機能は、指定したコマンドを定期的(デフォルトでは2秒おき)に実行して結果を画面に出すだけです。 少し工夫してあって、変更された部分を反転できるようになってたり、 出力が画面に入り切らない時には、スクロールして見ることもできます。
たいしたものではないけど意外と便利で、今でもたまに使ったりします。 たとえば、こんな感じ。
- WiFi の電波が取れないなー、なんでかな〜てな時
watch ifconfig -a
- やっべー、ディスクぎりぎりだよ、足りるかあ〜てな時
watch df
- ネットワーク調子悪いなあ、なんか起こってるのかしらん?てな時
まあ、これでもいいんだけど、反転だけではどうも色気がないんですね。 ncurses は色にも対応しているようなので、そういうの使うという手もあるのだけど、変更部分を調べる仕組みが単純に作ってあるので、行が増えたり減ったりすると途端にお手上げなわけです。
だったら、せっかく cdif で色が出るようにしたんだから、それを使えばいいじゃんということで作ってみました。 こんな感じの画面が2秒おきに表示されると考えておくんなさい。 cdif の変更点は、単に余計な部分を表示しないようにしただけです。 あ、実装言語は Perl ですよ。
似たようなツールはほかにもたくさんありそうですけどね。 watchdiff は、デフォルトでは垂れ流しモードなので、画面を書き換えずにスクロールしていきます。 最近はマルチウィンドウ環境が前提なので、その方が案外使いやすい場面も多いのではないかと思います。
しかし、en0 と連動する p2p0 ってインタフェースは一体何なんでしょうか? などという今まで気にもしなかかったことも、ビジュアル化することで気がついたりするわけです。 どうも、AirDrop と関係があるくさいです。
ちなみに watch コマンドで同じような画面を見ると、こうなります。 これでは、どこが変わったのかさっぱりわかりません。 ubuntu にも watch コマンドがあるらしいですが、それだとどう見えるのか気になるところです。
即席なので実装は粗粗、マニュアルテキトー。 特に端末制御周りは手抜きで、OS X 以外で動くかどうかはかなり怪しいです。 何かあったら github の issues でもなんでも適当にどうぞ。
NAME
watchdiff - repeat command and watch the differences
SYNOPSIS
watchdiff option -- command
Options:
--refresh=# refresh screen count (default 0)
--interval=# interval time between execution in second (default 2)
--count=# command repeat count (default 1000)
--[no]date show date at the beginning (default on)
--[no]silent do not show same result (default off)
--[no]newline print newline after command result (default on)
--exec set executing commands
--diff=command diff command used to compare result
Example:
watchdiff df
watchdiff --silent df
watchdiff --refresh 5 --noclear -- df
watchdiff --refresh 1 -- netstat -s -p ip
watchdiff --refresh 1 --exec uptime --exec iostat --exec df
watchdiff -s --refresh 1 --diff 'sdif --cdif -U100' -- netstat -sp ip
watchdiff --nodate --nonewline --count=18 --interval=10 date
INSTALL
cpanm App::sdif
AUTHOR
Kazumasa Utashiro
https://github.com/kaz-utashiro/sdif-tools
SEE ALSO
diff(1), cdif(1), sdif(1)
COPYRIGHT
Use and redistribution for ANY PURPOSE are granted as long as all copyright notices are retained. Redistribution with modification is allowed provided that you make your modified version obviously distinguishable from the original one. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES ARE DISCLAIMED.