几个月前,我写了一些bash来获取日期。我需要将这些日期作为ansible脚本中的事实,以便稍后使用它们从数据库中获取数据。这工作正常,直到今天这里是代码:
- name: Set date variables
set_fact:
first_day_last_month: "{{lookup('pipe','date -d \"-1 month -$(($(date +%d)-1)) days\" +%Y-%m-%d')}}"
last_day_last_month: "{{lookup('pipe','date -d \"$(date +%Y-%m-01) -1 day\" +%Y-%m-%d')}}"
first_day_current_month: "{{lookup('pipe','date -d \"-$(($(date +%d)-1)) days\" +%Y-%m-%d')}}"
last_day_current_month: "{{lookup('pipe','date -d \"-$(date +%d) days +1 month\" +%Y-%m-%d')}}"
然而,当我现在运行时,我收到一个错误: / bin / sh:1:算术表达式:期待EOF:“08-1”
我尝试在bash命令行上调试它:
seven@monstermachine:~$ echo $(date -d "-$($(date +%d)-1)")
08-1: command not found
Mit Nov 8 00:00:00 CET 2017
但直到现在我还没有解决它。
有人有任何想法吗?
答案 0 :(得分:3)
%d
为零填充,它给出八进制数或八进制数,08
不是一个有效的八进制数,它会产生错误。
您需要的是:
echo $(date -d "$(($(date +%e)-1))")
Wed Nov 8 07:00:00 IST 2017
注意%e
会导致日期填充空格,相当于%_d
。
使用$(( expression ))
格式执行数学表达式。我并不了解代码背后的实际逻辑,因此请确保您的代码符合逻辑。
答案 1 :(得分:3)
要在脚本中获取first_day_current_month
,您可以使用:
date +%Y-%m-01
与其他人类似,例如获取last_day_last_month
:
date -d `date +%Y-%m-01`"-1 day" +%Y-%m-%d
答案 2 :(得分:0)
感谢您的帮助,我将利用您的两个答案来提出更好的工作指令。