Git Bash + inotifywait でファイルを監視、内容を標準出力に出力するだけ
はじめに
本記事は、Git Bashを使う人向けです。Git Bashとinotifywaitでファイルを監視、変更時に内容を標準出力に出力する手順について述べます。以下でテスト結果をファイルに出力するようにしたので、それを簡単にモニタするためですが、他にも使い道はあると思います。
inotifywaitの導入
Linuxであればinotifyがあるため、inotify-toolsが使用できるのですが、Windowsです。しかし、ありがたいことことに、以下のようなinotify-toolsのポートがあります。
git clone
あるいは、Zipをダウンロードし、コンパイルします。コンパイルは、OSがLTSC、LTSB版で無ければまず問題無いと思われます。コマンドライン(cmd.exe)でREADMEのCompilingのコマンドを実行し、実行可能ファイル(inotifywait.exe)をフォルダ内に生成します。実行可能ファイルは、Git Bashから見えるパスに配置するか、フォルダへのパスを通します。
監視スクリプト
以下のようなスクリプトを作成します。
#!/bin/sh
inotifywait -q -m \
-e modify \
-r 'C:\OMRON\Data\SimulatorData\CARD\Memory001' \
--format '%w %f' |
while read -r dir file; do
file=${file//[$'\r']};
if [ ! -s "$dir\\$file" ]; then continue; fi
now=$(date '+%H:%M:%S');
echo;
echo "$now $file";
cat "$dir\\$file" 2>/dev/null;
done
Git Bashでこのスクリプトを実行すると、Sysmac Studioのシミュレータの仮想SDディレクトリを監視し、ファイルに変更があると標準出力にファイル内容を出力します。標準エラーは捨てます。シミュレータがファイルにアクセスしているときビジーになるので、そのメッセージを捨てるためです。
動かす
スクリプトを動作させた状態でシミュレータを実行し、ファイルを更新させると以下のようにファイル内容を出力します。
まとめ
これでテストを行いやすくなりました。スクリプトは、目的に合わせて内容を変更することになります。モニタだけであればWSL2環境を使うだけで十分かもしれません。PowerShellで監視を行う場合、FileSystemWatcherを使用すれば組めますが、C#に慣れているのであれば、C#スクリプトのほうが良いかもしれません。OSの機能をつなぎ合わせて何かをするわけでもないので、PowerShellのメリットが活かせません。
Discussion