date コマンドで実行しているスクリプトがあって
Alpine Linux の環境で動かすと期待度通りに動いてくれなかった
そもそも date コマンドには 3 つあるみたい
- BSD date
- GNU coreutils date
- BusyBox date
2021/07/16 の記事では BSD date と GNU coreutils date について書いたが、今回は BusyBox date を簡単に触る
Docker で Alpine Linux を触る
$ docker run -it alpine:latest /bin/shdate コマンドを見てみる
# date --help
BusyBox v1.33.1 () multi-call binary.
...もちろん BSD date や GNU coreutils date で使える日付操作のオプションが使えない
# date '+%Y-%m-%d' -d '1 day ago'
date: invalid date '1 day ago'
# date '+%Y-%m-%d' -v -1d
date: unrecognized option: v
...日付計算で出力する必要がある
# date '+%Y-%m-%d' -d "1970.01.01-00:00:$(( $( date +%s ) - $(( 24 * 60 * 60 )) ))"
2021-07-19月末の日を求めたかったが計算がややこしくなりそうだったので BusyBox date を使わない別の方法を考えることにした