Mac OS Xでファイルの変更時にスクリプトを実行する


8

Mac OS用のプログラムで、実行可能ファイルと監視するファイルに名前を渡して、監視対象のファイルが変更されるたびに実行可能ファイルを実行できることを知っている人はいますか?

私はこのようなことを念頭に置いています:

$ fwatch /Users/foo/doc.tex /Users/foo/run-pdflatex.sh &
  fwatch running. Listening for changes in /Users/foo/doc.tex.
$ echo "This aint no LaTeX" > doc.tex
$ fwatch: Change in /Users/foo/doc.tex detected. Running /Users/foo/run-pdflatex.sh...

回答:


6

これは、launchdを使用して設定できます。具体的には、launchd plistでwatchpathsキーを使用して、そのファイルの変更を探す必要があります。

このAFP548の記事で入手できる包括的な情報。

もはや開発中ではないようですが、Lingonは、これらのlaunchd plistファイルを設定するためのGUI方法を提供するアプリケーションです。

編集:

おおまかに言って、上記のサンプルパスを使用して次のことを行います。という名前のファイルcom.superuser.run-pdflatex.plistを次の内容で保存します~/Library/LaunchAgents

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
    <string>com.superuser.run-pdflatex</string>
    <key>OnDemand</key>
    <true/>
    <key>Program</key>
    <string>/Users/foo/run-pdflatex.sh</string>
    <key>ProgramArguments</key>
    <array>
            <string>run-pdflatex.sh</string>
    </array>
    <key>WatchPaths</key>
    <array>
            <string>/Users/foo/doc.tex</string>
    </array>
    </dict>
</plist>

次にlaunchctl load ~/Library/LaunchAgents/com.superuser.run-pdflatex.plist、ターミナルに入力して、ファイル監視デーモンをロードします。

上記は未テストですが、それが一般的な考え方です。


2

Automatorで実行できます。私が信じているオートマトンワークフローのフォルダーオプションの下にあります(Macの前ではありません)。次に、スクリプトをフォルダーに添付するだけで、ファイルが追加または変更されるたびにスクリプトが起動します。


ついていけません。私はAutomatorを使い始めたばかりですが、私の知る限り、スクリプトをいつ実行するかを選択することはできず、実行時に何をするかを選択することができます。Mac OSにも使用できるフォルダーアクションがありますが、AppleScriptには「フォルダーアイテムの追加時」のアクションしかなく、「フォルダーアイテムの変更時」のようなアクションはないと考えました。
ヨハネス

あなたは正しい@Johannesです。フォルダーアイテムの追加、フォルダーアイテムの削除、フォルダーウィンドウの移動、フォルダーウィンドウの閉じ、フォルダーを開くためのフォルダーアクションがありますが、ファイルへの変更を検出するためのフォルダーアクションはありません。これは、Applescript EditorでStandardAdditions.osax辞書を開くと確認できます。
ghoppe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.