特定のファイル(または特定のディレクトリに作成されたファイル、または...)が変更/削除されない限り、スクリプトはスリープ状態に保たれます。これはエレガントな方法で達成できますか?私が考えることができる最も簡単なのは、状態を再確認する前にしばらく休むループです。しかし、よりエレガントな方法がありますか?
答え1
inotify
Linuxでは、カーネルの機能を使用できます。スクリプトツールは次の場所にあります。イノティファイツール。
ウィキペディアの使用例:
#!/bin/sh
EVENT=$(inotifywait --format '%e' ~/file1) # blocking without looping
[ $? != 0 ] && exit
[ "$EVENT" = "MODIFY" ] && echo 'file modified!'
[ "$EVENT" = "DELETE_SELF" ] && echo 'file deleted!'
# etc...
答え2
というAPIがあります。inotifyCプログラマの場合。
これを使用するいくつかのツールがあります。インクロンそしてイノティファイツール。
答え3
実際には次のようになります。入力(1)ファイルが変更されるとランダムなコマンドが実行され、アプリケーションサーバーを再起動するための自動リロードオプションも提供されます。
編集:いくつかの例
ソースファイルが変更されたら、再構築してください。
$ find *.c | entr make
ファイルが変更されたら、テストサーバーを起動して自動的に再ロードします。
$ ls *.py | entr -r python main.py
引数を指定すると、各ファイルの名前を名前付きパイプに変更するように指示することで、より複雑なスクリプトを作成+/path/to/fifo
できます。entr
次のコマンドは、現在のディレクトリのMarkdownファイルを編集してHTMLに変換します。
$ ls *.md | entr +/tmp/notify &
$ while read F
> do
> markdown2html $F
> done < /tmp/notify