Bash日期查询停止工作

时间:2017-11-08 13:54:53

标签: bash shell date ansible

几个月前,我写了一些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

但直到现在我还没有解决它。

有人有任何想法吗?

3 个答案:

答案 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)

感谢您的帮助,我将利用您的两个答案来提出更好的工作指令。