【发布时间】:2019-06-24 11:12:23
【问题描述】:
对于上下文,我正在使用 MINGW64 的 Windows 机器上工作。我还没有机会在运行 Linux 的机器上对此进行测试。
我正在使用 bash 中的 [date][1] 并尝试将天数添加到表示为自 1970-01-01 00:00:00 以来的秒数的日期,即格式为 %s。我有以下 Bash 代码:
DATE1=$(date --date=now "+%s")
echo "DATE1: ${DATE1}"
DATE2=$(date --date="$(date --date="${DATE1}" "+%s")+2 days" "+%d%b%Y %H:%M:%S")
echo "DATE2: ${DATE2}"
提供控制台输出
DATE1: 156133763
date: invalid date '1561337963'
DATE2: 26Jun2019 10:59:24
事实上,DATE2 的期望值精确到秒。但是控制台仍然会引发错误。为什么会发生此错误?会不会和运行 MINGW64 有关系?
更新:
我在我可以访问的 Debian 服务器上运行它。它使用now 计算时间,就像在 MINGW 上一样,但返回了一个不同的错误:./test.sh: line 3: --date=1561342165: command not found。
使用自定义日期在同一台服务器上运行它:
DATE1=$(date --date="$(date --date="19Jun2019 11:35:46" "+%d%b%Y %H:%M:%S")" "+%s")
同样返回
DATE1: 1560908146
date: invalid date ‘1560908146’
DATE2: 26Jun2019 12:20:08
这实际上表明它根本没有添加到定义的日期,而只是添加到今天的日期(现在是 6 月 24 日)。显然,有些地方很不对劲!
【问题讨论】:
-
它是否适用于任意
DATE1,还是仅在DATE1存在时才有效? -
可能是我的 bash 知识欠佳,但即使使用
DATE1=$(date --date="$(date --date="26Jun2019 11:35:46" "+%d%b%Y %H:%M:%S")" "+%s"),我也无法使用它。它返回date invalid date '1561512946'并完全错过了DATE2: 26Jun2019 11:42:40的添加(请注意,由于某种原因,时间是我的当地时间)。 -
我怀疑某个地方有一个愚蠢的错误:无论我输入的日期如何,它总是给出 26Jun2019 和当地时间。
-
date: invalid date根本不是 bash 错误。date不是 bash 的一部分;它是一个单独的命令,通常由您的操作系统供应商提供——因此,如果代码使用excve()系统调用直接调用date,您可能会在 甚至没有调用 shell 的代码中遇到该错误. -
(如果它接受
--date=now,您可能拥有 GNU 版本的 date ——这对于基于 mingw 的发行版来说是有意义的)。