【发布时间】:2010-12-04 05:59:22
【问题描述】:
我正在尝试从 GNU Make 文件更新 crontab。 这个想法是这样的:我查看现有的 cron 表并过滤掉所有标记为我的条目(通过注释)并将其保存到一个临时文件中。然后我将我的工作添加到该临时文件并使其成为一个新的 cron 表。这样,make 文件可以多次运行而不会损害其他人的工作。
这是make文件的相关部分:
crontab.tmp: $(CRON_FILES)
@echo -n "Generating new cron table combining existing one with a new one ..."
if $$(crontab -l); then crontab -l | grep -v "MAX-CRON-JOB"; fi > $@
@cat $(CRON_FILES) | awk '{print $$0, " ## MAX-CRON-JOB"}' >> $@
@echo "OK"
.PHONY: cronjobs
cronjobs: crontab.tmp
@echo -n "Installing cron commands... "
@crontab $<
@echo "OK"
令人不安的是这一行:
if $$(crontab -l); then crontab -l | grep -v "MAX-CRON-JOB"; fi > $@
当 cron 表为空时,它会以某种方式破坏 make,而相应生成的 bash 命令:
if $(crontab -l); then crontab -l | grep -v "MAX-CRON-JOB"; fi > crontab.tmp
从命令行运行正常。
这是一个错误(如果你问我的话,没有什么特别的信息......):
Generating new cron table combining existing one with a new one ...if $(crontab -l); then crontab -l | grep -v "MAX-CRON-JOB"; fi > crontab.tmp
make: *** [crontab.tmp] Error 1
我在这里错过了什么?
【问题讨论】:
-
谢谢大家,我解决了这个问题。然而,我这样做的方式对我来说毫无意义,所以我不会发布我的解决方案。无论如何我无法真正解释它,所以我的主要错误是首先为此目的使用 Make 和 bash :)