我正在运行一个包含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特定的,这会在其他服务器上出现问题吗?
答案 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)
手册页。