launchd: WatchPaths не будет запускать простой сценарий "hello world" (OS X 10.8)

Возникла странная проблема У меня есть ~/Library/LaunchAgents/com.me.helloworld.plist со следующим содержанием:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>com.me.helloworld</string>
        <key>ProgramArguments</key>
        <array>
                <string>/Users/me/temp/test.sh</string>
        </array>
        <key>WatchPaths</key>
        <array>
                <string>/Users/me/temp/Journal.txt</string>
        </array>
</dict>
</plist>

Идея в том, что если ~/temp/Journal.txt изменен, он должен выполнить ~/temp/test.sh. test.sh имеет следующее содержимое:

#!/bin/bash
echo "hello world from test.sh" >> itchanged.txt

Так что, если я изменю Journal.txt, я должен получить файл с именем itchanged.txt. Когда я делаю следующее:

$ launchctl unload ~/Library/LaunchAgents/com.me.helloworld.plist
$ launchctl load ~/Library/LaunchAgents/com.me.helloworld.plist
$ touch Journal.txt

Выполнение команды ls показывает, что test.txt не создан. Тем не менее, если я вручную сделаю./test.sh, то itchange.txt IS создан. Таким образом, проблема, кажется, где-то в том, чтобы распознать, что Journal.txt изменен, и выполнить сценарий, когда это происходит.

Я использую OS X Mountain Lion. Есть идеи?

1 ответ

Решение

Ваш скрипт не указывает путь для itchanged.txt; поскольку рабочим каталогом по умолчанию для запускаемых процессов является /, а ваша учетная запись, вероятно, не имеет разрешений для создания файлов там, itchanged.txt никогда не будет создан. Вы должны либо указать путь в скрипте, либо добавить ключ WorkingDirectory в свой.plist, чтобы изменить значение по умолчанию.

Другие вопросы по тегам