ファイルの更新を検知してコマンドを実行するRubyスクリプト

lessとかautospecとかはファイルの更新を検知してコマンドを実行してくれるけど、それっぽいのを任意のファイルとコマンドについてやりたくなったのでRubyで書いてみた。

コマンド名は適当にjamieとする(誰かすでに書いてあるだろうものに名前をつけるのもおこがましいけど)。次のような感じで使う:

$ jamie
Usage: jamie file command
$ jamie ~/.zsh_history "echo 'こんにちは!こんにちは!'"

やっつけでつくったのでクオリティとかは気にしない。

追記 (2010-11-12)

動機は、autospecだとそのときテストしていたspecファイルが通ったら自動で全部のspecファイルをテストするので、バッチ処理などの独立性の高いスクリプトを書いてるときにちょっとウザったかったこと。なので指定した一つのspecファイルを継続的にテストしてくれる仕組みが欲しかった。

で、思わぬ副作用として得られたのが、テスト対象のspecファイルが文法エラーなどで例外を吐いてもこのスクリプトだとループの処理自体は止まらない。autospecだと止まってしまっていたので、全体のテストの実行時間が長い現状ではなかなか辛いものがあった。