ファイルが変更されるたびにコマンドを自動的に実行する

ファイルが変更されるたびにコマンドを自動的に実行する

ファイルに変更を加えて保存するたびに、コマンドを実行したいと思います。ファイルを監視して、必要に応じてコマンドを実行できる Ruby スクリプトを設定することもできますが、これを行うための簡単な Unix の方法があるはずだと思い至りました。あるのでしょうか? もう少しわかりやすく言うと、私は Ubuntu 8.10 を使用しています。

編集:

incronが提案され、良さそうです。しかし、うまく動作させるのに問題があります (編集: 指定したディレクトリにファイルを保存するとコマンドが実行されないようです。または、コマンドに欠陥があります)。incron をインストールし、incrontab を使用してユーザーの incron テーブルを設定し、ユーザーを許可リストに追加しました。私の具体的な状況は、TeX ファイルを編集することです。TeX ファイルを編集して保存するたびに、PDF としてレンダリングするコマンドを実行したいです。そこで、私が思いついた incron テーブル エントリは次のとおりです。

/home/ehsanul/Documents/latex IN_CLOSE_WRITE echo $@/$# | grep \\.tex$ | xargs xelatex

何が間違っているのでしょうか?

答え1

どのUnixを使用しているかはわかりませんが、Linuxには通知そして、inotify ツールそしてインクロン

そこにはRubyインターフェース通知する。

答え2

直接的には、いいえ (私がよく知らないファイルシステム上の何らかのフックがない限り)。

標準的な方法でファイルを編集していますか? その場合は、システム レベルからではなく、その角度からコマンドを自動化する方が簡単になります。

状況を詳しくお知らせいただければ、より適切な回答ができるかもしれません。

答え3

バージョン管理を使用している場合 (使用していない場合は、ぜひ使用してください)、コミット フックを設定できます。コミット フックを設定できるバージョン管理プログラムを選択するだけです。ほとんどのバージョン管理プログラムはコミット フックをサポートしています。

答え4

インストールinotify ツール

単一のファイルを監視し、変更があったときにコマンドを実行するには:

inotifywait -m --format %w FILENAME | while read file; do
  COMMAND ${file}
done

どこ

  • FILENAME: 監視したいファイルの名前
  • COMMAND: ファイル変更時に実行するコマンド
  • -m: 無期限に聴くオプション

inotifywaitはファイル名以外の情報も出力できます( 経由)。他に何ができるかは で--format確認してください(かなり短い読み物です)。さらに、man inotifywaitウィキでいくつかの洞察を与えます。

誰かがこれらのコマンドを、あなたが要求したことを正確に実行する便利なスクリプトでラップする必要があるでしょう。

convenience-script FILENAME COMMAND

関連情報