launchd:WatchPaths无法触发简单的“hello world”脚本(OS X 10.8)

6

这里有一个奇怪的问题。我有一个文件路径为~/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,则会创建itchanged.txt文件。因此,问题似乎在于识别Journal.txt已更改并在发生更改时执行脚本的某个位置。

我正在使用OS X Mountain Lion操作系统。有任何想法吗?

1个回答

7

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接