OS X。
launchctl
がファイルの監視をすると言っても、存在の有無程度。
ファイルが更新されたかどうかなどの、細やかなチェックは別途考えなきゃならない。
ってんで、 fswatch。
インストール
brew。
$ brew install fswatch
使い方
$ fswatch FILE
で FILE が更新されたら、stdout にパスが表示される。
-
-o
を効かせたら、フラグ(1)だけを出力する事が可能。 -
-l
で告知までの待ち時間を指定出来る。- 対人では、変更直後に変更を繰替えす様な人に対応する為に、多めに取っとくのが吉か?
プログラム
仕様上、launchd
に優しくない。
以前のバージョンは、
$ fswatch FILE COMMAND
なる構文が可能で、これだと、 .plist の ProgramArguments
にさくっと記載出来るものの、現在は廃止。
$ fswatch -o FILE | xargs -I {} COMMAND
を使えとの事。
ProgramArguments
は、文字通りの引数であって、シェルじゃないから、パイプやらリダイレクションやらは一切効かない。てな訳で、上記の行を、 .sh
にして、それを読み込むと言う、なんだかなーーな状況になる1。
ぼやいてても仕方ないので自作。
exec_fswatch.sh
#!bin/sh
fswatch_exe=${HOME}/cmd/homebrew/bin/fswatch
file_path=/PATH/TO/FILE
$fswatch_exe -o -l 10 $file_path | xargs -I {} perl -x $0
exit 0
#!/usr/bin/env perl
print "changed\n" ;
perl で実行してみて挙動確認後2、
$ perl -x exec_fswatch.sh
モニタ開始。
$ sh ./exec_fswatch.sh
上手く監視出来てるのを確認したら、 .plist 書いてデーモン化。