2017-11-08 5 views
0

数ヶ月前に私は日付を取得するためにbashを書いた。これらの日付は、データベースからデータを取得するために後で使用するために、不可解なスクリプトで事実として必要でした。しかしBashの日付クエリが動作しなくなった

- 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のコマンドライン上でデバッグしようとした:

[email protected]:~$ echo $(date -d "-$($(date +%d)-1)") 
08-1: command not found 
Mit Nov 8 00:00:00 CET 2017 

が、今まで、私はそれを固定届きません。

誰でもご存知ですか?

+1

デバッギングコマンドは、かっこのセットを欠いています。$(())は、2セットのか​​っこで構成されています。 – marcolz

+0

@marcolz:はい、同意しますが、(デバッグステップ以外の)問題コードの* *には '$(date ..)'しかありません。皆さんお元気で。 – shellter

答えて

3

%dは8進数または8進数を与えるゼロ詰めであり、08はエラーを示す有効な8進数ではありません。日付が%_dと同等であるスペースで埋めることになります

echo $(date -d "$(($(date +%e)-1))") 
Wed Nov 8 07:00:00 IST 2017 

%e

は何が必要のようなものがあります。

数式を実行するには、$((expression))形式を使用します。私はあなたのコードの背後にある実際のロジックを理解していなかったので、コードがロジックに合っていることを確認してください。

3

スクリプトでfirst_day_current_monthを取得するには、使用できます。

例は last_day_last_month取得するために、他人のために同様の
date +%Y-%m-01 

:ヘルプは

date -d `date +%Y-%m-01`"-1 day" +%Y-%m-%d 
0

感謝し、私は両方を利用しますより良い作業コマンドを思いつくための答えが表示されます。

関連する問題