inotifywait/inotifywatchでファイルシステムの変更イベントを監視してコマンド実行する

sphinxでrstファイルを更新する度にmake htmlするのが面倒なので、inotifyでsourceディレクトリ(*.rst, conf.py 保存ディレクトリ)の更新を検知したら、make htmlするようにバックグラウンドで回しておく。

inotifywatchが入ってなかったらapt/yum でinotify-tools を入れる。

$ while inotifywatch -e modify ./source ; do make html; done

正確には、このコマンドだとrstの更新をしてなくてもmake htmlが走ってしまいます。sourceディレクトリの更新を監視しているので、(vimの設定によるが) vim foo.rst とファイルを開くと.foo.rst.swp が作成されて、ディレクトリに更新がかかってmake htmlが実行される。
ただ、この時点ではrstファイルは更新されてないのでmake htmlは"no targets are out of date."と言ってすぐ終了するし、自分の環境で動かすだけだしこれでいいや。

### 2024追記

久々に自分の記事に辿り着いてみたけど、当時はオプションを理解していなかったのかオプションが変わったのかよくわからないがこれでは動かない。
inotifywatchは-t で時間(seconds)を指定しないとCtrl-Cで止めるまでイベント情報を収集し続ける。
ファイルの更新を検知してwhileループでコマンドを実行するのであればinotifywaitを使えばいい。
inotifywaitは-m を指定するとmonitorになってファイルを監視し続けるが、-mを指定しないとイベントを検知するとそのままコマンドが終わるので、whileループをまわして任意のコマンドを実行できる。

$ while
inotifywait -e modify ./source
do
make html
done