'7天前'在crontab中的日期格式问题

时间:2014-10-14 21:51:36

标签: bash cron

我正在运行一个包含curl whron的cron,其中包含startDate和endDate的值,它们必须采用yyyy-mm-dd格式。 endDate是今天,startDate是7天前。总体格式为:

curl -o ~/location/filename.xml "http://url.asmx/do_this?&startDate=x&endDate=y"

使用固定的开始日期,这可以通过macosx上的终端运行:

&startDate=2014-10-01&endDate=`date +\%Y-\%m-\%d`"

但是,记住startDate应该在系统日期之前7天,以下两种方法都会导致错误'指定的日期格式不正确。日期格式应为:YYYY-MM-DD,例如2011-12-24'

startDate=`date -d '7 days ago' +\%Y-\%m-\%d`&endDate=`date +\%Y-\%m-\%d`
startDate=`date --date="7 days ago"  +\%Y-\%m-\%d`&endDate=`date +\%Y-\%m-\%d`

使用"这是一个问题吗? '和`?

我在这里做错了什么?顺便说一下,我试图保留在一行命令行中,而不是在文件中使用脚本。

编辑:从谷歌搜索和复制并粘贴许多建议,我发现以下在Mac论坛上有效:

$(date -v-7d +%Y-%m-%d)

但是之前我没有遇到过-v。我想知道它是什么,是Mac特定的,这会在其他服务器上出现问题吗?

2 个答案:

答案 0 :(得分:1)

  

使用"这是一个问题吗? '和`?

可能。用$()取代``命令有效:

curl -o ~/location/filename.xml "http://url.asmx/do_this?&startDate=$(date -d '7 days ago' +\%Y-\%m-\%d)&endDate=$(date +\%Y-\%m-\%d)"

答案 1 :(得分:1)

不带引号的&是命令终止符。它会将startDate变量定义放在后台(子shell)中,因此它不会存在于当前shell中。演示:

$ startDate=`date -d '7 days ago' +\%Y-\%m-\%d`&endDate=`date +\%Y-\%m-\%d`
[1] 25595
[1]+  Done                    startDate=`date -d '7 days ago' +\%Y-\%m-\%d`
$ echo $startDate--$endDate
--2014-10-14

有些date认为+%F+%Y-%m-%d的简写

此外,您必须小心使用crontab条目中的date%字符将被转换为换行符,除非转义。阅读crontab(5)手册页。