【发布时间】:2019-11-27 00:18:07
【问题描述】:
当我直接通过终端尝试时,以下脚本运行良好:
count=`ls -l /Users/ben/Downloads/*.png 2>/dev/null | wc -l`
echo $count`
它返回计数为 1,这是正确的!
但是当我通过 launchd 运行它时,它总是返回零!
这是我的启动脚本
<?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.ben.Cleaner</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/Users/ben/Scripts/clean.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>22</integer>
</dict>
<key>StandardErrorPath</key>
<string>/tmp/AlTest12.err</string>
<key>StandardOutPath</key>
<string>/tmp/AlTest12.out</string>
</dict>
</plist>
知道为什么它不能通过 launchd 工作吗?我在 Mac OS Catalina 上运行。
【问题讨论】:
-
不应该
/tmp/AlTest12.err知道它为什么会失败吗? -
好吧,没有什么是失败的。相反,它只是返回零(而不是 1)。正如我所说,如果我从终端运行脚本,它工作正常!
-
第二行中的`字符在做什么?错字?它可能与默认外壳有关。在脚本的开头添加 shell。 (#!/bin/bash, #!/bin/zsh ...) 尝试调试变量并将代码从脚本中返回到文件中。在脚本的第一行也使用 $() 而不是 ``。 ;)
-
因此,当您从命令行运行
/bin/sh /Users/ben/Scripts/clean.sh时,它运行良好并打印 '1'。 -
@Roadowl,没错
标签: bash macos launchd macos-catalina