启动的Shell脚本执行失败

时间:2015-01-07 23:28:43

标签: shell launchd

我正在尝试使用Launchd来运行以下shell脚本:

#!/bin/sh

## wait for sunset, touch file

NIGHTTIME='/Users/mnewman/Documents/webcam/nighttime.txt'

sunwait civ down  14.98N 102.09E
touch "$NIGHTTIME"

“sunwait”是一个可执行文件,它在后台运行并等待日落/日出然后退出。在这种情况下,我将它设置为等到我的地理位置的平民黄昏日落。

如果我从命令行运行此脚本,它可以正常工作。如果我使用Launchd运行它,touch命令会在sunwait完成之前运行。在执行下一行之前,我需要sunwait完成。我该怎么做?

1 个答案:

答案 0 :(得分:1)

此处最有可能的情况是,您已在启动sunwait中的某个位置安装了PATH。解决方案只是指定要在脚本中使用的PATH - 并且,作为安全措施,告诉脚本在sunwait失败时不创建文件。

#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin:/opt/local/bin
nighttime=/Users/mnewman/Documents/webcam/nighttime.txt

sunwait civ down  14.98N 102.09E || exit
touch "$nighttime"

将shebang行更改为#!/bin/sh -e也会导致脚本在sunwait无法运行时提前保释,但使用set -e有明显的警告(记录在{{ 3}})。