我正在尝试使用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完成。我该怎么做?
答案 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}})。