在大多数时候,Mac 系统和 Linux 系统在终端的使用体验上是比较一致的,但偶尔也有一些命令,会出现两端不一样的情况。比如,当需要通过 date
命令获取昨天的日期。
在 Mac 中,可以通过如下的命令来完成:
date -v '-1d' '+%Y-%m-%d'
输出的结果是 2019-08-25
。(这里,'+%Y-%m-%d'
指定 date
以“年-月-日”的格式输出日期;另外,如果想要得到明天的日期,可以通过 +1 day
或 +1d
来得到)
然而,在 Linux 系统下,同样的命令无法使用。需要修改成:
date -d '-1 day' '+%Y-%m-%d'
才可以得到同样的结果。这里需要注意一点,如果 Docker 是基于 Alpine 的,默认 date
不支持 -d
这个选项,需要额外安装 coreutils
之后,才可以使用。即,在 Dockerfile 中增加:
RUN apk add --update coreutils && rm -rf /var/cache/apk/*
之后,上面的命令才能正确运行。
如果希望一个命令可以在两个系统中运行,可以用如下的方法进行整合:
[[ $OSTYPE == "darwin"* ]] && \
date -v '-1d' '+%Y-%m-%d' || \
date -d '-1 day' '+%Y-%m-%d'
注意,这里需要使用 [[
进行判断,[
的比较是无法使用 *
元字符匹配的。当然,这里没有考虑 Windows 的情况,毕竟 Windows 的情况太特殊了,大部分的命令都不兼容。