在 crontab 作业的变量中使用引号

在 crontab 作业的变量中使用引号

我正在尝试使用类似这样的方法在 cron 作业中获取过去的日期。但DATE变量始终为空。

DATE=date -d "$date -1 days -1 months" +%Y-%m
* * * * * /bin/echo "Date: $($DATE) Test" >> /tmp/crontab.log 2>&1

我知道 crontab 有多棘手,这要归功于这个问题有很好的答案,但这里的问题似乎不是标志%,因为上面的代码运行良好:

DATE=date -d @2147483647 +%Y-%m
* * * * * /bin/echo "Date: $($DATE) Test" >> /tmp/crontab.log 2>&1

但如果我使用引号,那么工作就无法再次获取日期。

DATE=date -d"@2147483647" +%Y-%m
* * * * * /bin/echo "Date: $($DATE) Test" >> /tmp/crontab.log 2>&1

我尝试用单引号、双引号替换引号,转义引号,但这些选项都无法解决问题。我需要引号来指定部分"$date -1 days -1 months"。有没有办法在 crontab 中执行此操作而无需创建外部脚本?

CentOS 7 和 crontab(cronie-1.4.11-23.el7.x86_64)

答案1

该问题与 无关,cron但与 中的变量扩展有关$()date子 shell 中调用的命令$()看不到参数-d "$date -1 days -1 months",而是多个参数:-d "$date -1 days -1 months。您可能想改用$(eval $DATE)

相关内容