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

标签 macos bash plist osx-mountain-lion launchd

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

最佳答案

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

关于macos - launchd:WatchPaths 不会触发简单的 "hello world"脚本 (OS X 10.8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14108471/

相关文章:

ios - 对多个 Xcode 目标使用相同的版本号 Info.plist

objective-c - 读取 plist 文件崩溃

macos - 为什么这个与链表相关的程序在 x86 segfaulting 中?

macos - 常规 gcc 和 Mac OSX gcc 之间的区别?

bash - USB 供应商和产品 ID 到设备绑定(bind)

bash - 字符串重组命令的IO重定向

ios - 在 Swift 中使用 PropertyListDecoder 时从 plist 解析浮点值时解码错误

node.js - 如何在 Windows 上的 Node.js 中获取文件的大小写精确路径?

c++ - Qt 4.7 - 工具提示和 QComboBox 弹出窗口在 OS X 10.12 下出现空白

c++ - 在 C++ 中模拟 linux/bash shell?