ファイルが変更されたときに何かする


10

LaTeXドキュメントを書いていると、エディターでF6キーを押して頻繁にコンパイルすることに気づきました。または、SASSを使用するときは、よく入力makeしてに変換.scss.cssます。

ここでmake、特定のファイルが変更されるたびに、マシンにダーティな作業を実行させ、何か他のものを実行させたいと思います。

これまでのところ、ターミナルウィンドウを開いたままにし、上矢印キーを押して戻りました。またはを使用しましたがwatch make、それは奇妙な解決策のようです。

Linuxで、特定のファイルが変更されたときに何かを行う良い方法はありますか?

回答:


4

inotify-toolsのinotifywait一部を探しています。プロジェクトのサイトでそれを使用する方法のいくつかの例がありますが、簡単なアプローチは、

while true; do inotifywait code.cpp -e modify; make; done

その重要な部分は、

inotifywait code.cpp -e modify

そのコマンドcode.cppは、変更されるまで待機してから終了します。無限ループに入れ、その後に続くとmake、変更のたびに常に再構築されます。

変更を待つ以外に、作成、削除、アクセス、開く、閉じるなどを待つことができます。プロジェクトの使用例inotifywaitのマニュアルページ参照して、プロジェクトの使用方法に関する他のアイデアを確認することを強くお勧めします。


それがまさに私が探しているものです!
Martin Ueding、2012年

1

時間イベントの代わりにファイルシステムイベントに応答するcronのようなパッケージであるincronを見てください。パッケージは、よく知られている/ ペアのcron に類似したデーモン(incrond)とテーブルマニピュレーター(incrontab)で構成されています。crondcrontab

incronをmake使用すると、特定のファイルやディレクトリが変更されたときに実行するように簡単に調整できます。


これは一方ではやり過ぎのように見えますが、もう一方では適切なツールです。確認する必要があります。プログラミングセッションごとに有効または無効にできます。
Martin Ueding 2012

0

ではなくwatch make、いかがwatch lsですか?次にmake、タイムスタンプが変更されたとき。


まあ、makeはすでにタイムスタンプをチェックしているので、時間をチェックしてからもう一度時間をチェックさせても意味がありません。
Martin Ueding

そうですが、makeを実行すると、lsを実行するよりもコストが高くなります。
Scott C Wilson

1
そして、私のメイクファイルがその単一の2行だけの場合.tex?それはlsパーサーを書く価値があると思いますか?
Martin Ueding、2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.