Linuxは、ファイルの作成、変更、削除など、すべてのファイルシステムイベントを監視するための優れたインターフェイスを提供します。インターフェイスはinotifyシステムコールのファミリであり、これらのコールを利用するユーザースペースユーティリティはinotify-tools、Ubuntu のパッケージ(ユニバースリポジトリで入手可能)によって提供されます。まだインストールしていない場合は、次の方法でインストールします。
sudo apt-get install inotify-tools
inotify-tools提供しinotifywait、inotifywatchバイナリ、私たちは最初のものを必要としています。
したがってasciidoctor -q some_file、.adocファイルが変更されたときにコマンドが実行されるようにします(そのファイルsome_fileに置き換えられます)。その場合、.adocファイルがdirectory /foo/barにあると想定して、監視を設定できます。
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-qクワイエットモードを有効にし、inotifywaitそれ自体からの情報はありません
-m 監視モードを有効にします。それ以外の場合は、最初のイベントの後に終了します
--event modify、modifyイベントにのみ関心があります。つまり、ファイルが変更されたときです。その他の可能な値にはopen、closeなどがあります。
--format %w、他のコマンドへの入力としてファイル名を使用するため、他の情報の束ではなく、変更されたファイル名のみが必要です。
/foo/bar/*.adocディレクトリ.adoc下のすべてのファイルに展開されます/foo/bar
上記の例では、ファイル名が変更されるたびにファイル名が表示されます。次に、ファイル名に対してコマンドを実行します(コマンドがSTDINを介して引数をとるとします)。
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
ディレクトリに再帰的な監視を設定することもできgrepます。その場合は、目的のファイルのみをフィルタリングするために使用する必要があります。ここでは、-rディレクトリでウォッチを再帰的に設定し()、ファイルをフィルター/foo/barするgrepために使用してい.adocます。
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
ディレクトリを監視する場合、出力フォーマット指定子%wはディレクトリ名に解決さ%fれるため、ファイル名を取得する必要があります。ファイルの監視中、%f空の文字列に解決されます。
、あなたも実行できることを注意inotifywaitデーモン(中-d)モードのことができます。また、スクリプト全体のこと、および/またはバックグラウンドで実行、および/またはそれ以上の他のオプションを使用してプレイ。
また、必要にasciidoctor応じて、任意の他のコマンドに置き換えることができます。
man inotifywaitより多くのアイデアを得るためにチェックしてください。