🥢

Git Bash + inotifywait でファイルを監視、内容を標準出力に出力するだけ

2024/11/25に公開

はじめに

本記事は、Git Bashを使う人向けです。Git Bashとinotifywaitでファイルを監視、変更時に内容を標準出力に出力する手順について述べます。以下でテスト結果をファイルに出力するようにしたので、それを簡単にモニタするためですが、他にも使い道はあると思います。

https://zenn.dev/kitam/articles/86d41335153fe6

inotifywaitの導入

Linuxであればinotifyがあるため、inotify-toolsが使用できるのですが、Windowsです。しかし、ありがたいことことに、以下のようなinotify-toolsのポートがあります。

https://github.com/thekid/inotify-win

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