launchd:WatchPaths不会触发简单的"hello world"脚本(OS X 10.8)

use*_*620 6 macos bash launchd plist osx-mountain-lion

这里有一个奇怪的问题.我有〜/ 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>
Run Code Online (Sandbox Code Playgroud)

这个想法是,如果〜/ temp/Journal.txt被修改,它应该执行〜/ temp/test.sh.test.sh具有以下内容:

#!/bin/bash
echo "hello world from test.sh" >> itchanged.txt
Run Code Online (Sandbox Code Playgroud)

所以,如果我更改Journal.txt,我应该得到一个名为itchanged.txt的文件.当我执行以下操作时:

$ launchctl unload ~/Library/LaunchAgents/com.me.helloworld.plist
$ launchctl load ~/Library/LaunchAgents/com.me.helloworld.plist
$ touch Journal.txt
Run Code Online (Sandbox Code Playgroud)

执行ls表示未创建test.txt.但是,如果我手动执行./test.sh,则会创建itchanged.txt.因此问题似乎在于识别Journal.txt已更改并在发生这种情况时执行脚本.

我正在使用OS X Mountain Lion.有任何想法吗?

Gor*_*son 7

您的脚本没有为itchanged.txt指定路径; 由于启动启动进程的默认工作目录是/,并且您的帐户可能没有在那里创建文件的权限,因此永远不会创建itchanged.txt.您应该在脚本中指定路径,或者将WorkingDirectory键添加到.plist以更改默认值.