这里有一个奇怪的问题。我有 ~/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。有任何想法吗?