Запустить скрипт при изменении файла в 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 . В частности, вам нужно использовать ключ watchpaths в вашем файле launchd plist для поиска изменений в этом файле.

Исчерпывающая информация доступна в этой статье AFP548 .

Хотя кажется, что он больше не разрабатывается, Lingon - это приложение, предоставляющее графический интерфейс для настройки этих файлов launchd plist.

РЕДАКТИРОВАТЬ:

Грубо говоря, вот что вы бы сделали, используя приведенные выше примеры путей. Сохраните файл 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. Я полагаю, что он находится в разделе «Папка» в рабочем процессе Automator (не перед Mac). Затем вы просто прикрепляете скрипт к папке, и он будет запускаться каждый раз, когда файл добавляется / изменяется.


Я не могу следовать. Я новичок в Automator, но, насколько я знаю, вы не можете выбирать, когда выполнять скрипт, а только то, что делать, когда он запущен. Есть действия с папками в Mac OS, которые я мог бы также использовать, но я полагал, что в AppleScript есть только действие «добавить элементы папки в», но ничего похожего на «изменение элементов папки в».
Йоханнес

Вы правы @ Йоханнес. Хотя существуют действия с папками для добавления элементов папки, удаления элементов папки, перемещения окна папки, закрытия окна папки и открытия папки, действие «Папка» для обнаружения изменений в файлах отсутствует. Это можно увидеть, открыв словарь StandardAdditions.osax в редакторе приложений.
ghoppe
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.