読者です 読者をやめる 読者になる 読者になる

inohilog

/var/log/inohiro

ファイルの変更を監視して,何か(スクリプトの実行等)する

  • 特定のファイルやディレクトリを監視して,変更等を監視して何かアクションを起こしたいということがたまにある
    • rspec のテストを記述している時は,ZenTest gem を使うことで,spec ディレクトリ以下の変更を検出して,勝手にテストを走らせ直すとかが可能
  • 今回やりたかったのは,TeX ファイルを保存したら,tex -> dvi -> pdf に変換するスクリプト(既にある)を走らせたい
    • ZenTest を使うと簡単にできるかなと思ったけど,ぐぐってもあまり例が見当たらなかった
  • inotifyKqueue を使うと,ファイルやディレクトリの変更を検出することができるようである
    • (ログを流し見る時に使う 'tail -f' の inotify を使ったものが 'tailf' だったような)
  • inotify は Linux でないと動かないようだ.Kqueue は,*BDS, DarwinMac OS X)で動く
    • ただ,手元のMac OS X(Lion)では,libffi のエラーで,Kqueue も動かない
    • 動かす環境に合わせて,inotify と Kqueue を勝手に選ぶようなコードを書こうとしているが,今やるべきことではないので,後々
$ ruby kqueue.rb
/Users/inohiro/.rvm/gems/ruby-1.9.2-p320/gems/ffi-1.1.5/lib/ffi/library.rb:150:in `ffi_libraries': no library specified (LoadError)
	from /Users/inohiro/.rvm/gems/ruby-1.9.2-p320/gems/ffi-1.1.5/lib/ffi/library.rb:228:in `attach_function'
	from /Users/inohiro/.rvm/gems/ruby-1.9.2-p320/gems/rb-kqueue-0.1.0/lib/rb-kqueue/native.rb:34:in `<module:Native>'
	from /Users/inohiro/.rvm/gems/ruby-1.9.2-p320/gems/rb-kqueue-0.1.0/lib/rb-kqueue/native.rb:9:in `<module:KQueue>'
	from /Users/inohiro/.rvm/gems/ruby-1.9.2-p320/gems/rb-kqueue-0.1.0/lib/rb-kqueue/native.rb:3:in `<top (required)>'
	from /Users/inohiro/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require'
	from /Users/inohiro/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:55:in `require'
	from /Users/inohiro/.rvm/gems/ruby-1.9.2-p320/gems/rb-kqueue-0.1.0/lib/rb-kqueue.rb:1:in `<top (required)>'
	from <internal:lib/rubygems/custom_require>:33:in `require'
	from <internal:lib/rubygems/custom_require>:33:in `rescue in require'
	from <internal:lib/rubygems/custom_require>:29:in `require'
	from kqueue.rb:1:in `<main>'

追記: guard というのがあるらしい