# date +"%b %d %H:$(( $(date +'%M')-5))"
Nov 20 12:45
date +"%b %d %H:$(( $(date +'%M')-55))"
Nov 20 12:-5
我为什么要来-5
这里?如何纠正?请帮忙。
答案1
可能是因为你在 12:50 运行它,其中date +%M
给出了 50,当你减去 5 时,它变成 45;如果你减去 55,则变成 -5。
在 12:00 时,您的第一个分数也会得到 -5。
在 12:07 时,您将得到12:2
而不是12:02
,而在 12:09 时,某些 shell 会抱怨09
不是有效的八进制数。您不能只将分钟字段减去 5 来获得提前 5 分钟的时间。例如,考虑一下在 时Jan 1 00:00
,它应该给您Dec 31 23:55
。
对于 Solaris 上的日期计算,您可以使用perl
或zsh
,但默认情况下并不总是安装后者。要获取 5 分钟前的时间:
perl -MPOSIX -le 'print strftime("%b %d %R", localtime(time - 5*60))'
或者:
zsh -c 'zmodload zsh/datetime; strftime "%b %d %R" $((EPOCHSECONDS - 5*60))'
实际上从 Solaris 11 版本开始,/bin/sh
实际上/bin/ksh
是 ksh93,所以你也可以使用ksh
那里(最好不要sh
像 whilesh
那样)现在由 ksh93 实现,将来可能会改变,并且标准sh
语言没有这些功能):
ksh -c 'printf "%(%b %d %R)T\n" "5 minutes ago"'
正如 @glennjackman 在评论中指出的,如果您已经bash
安装,您还可以执行以下操作:
bash -c 'printf -v t "%(%s)T" -1 && printf "%(%b %d %R)T\n" "$((t - 5*60))"'
(Solaris 版本 11 中也添加了对 bash 的支持,%s
并且是最新版本的 bash)。
虽然我们正在积累更多语言,但如果您有 TCL 口译员,例如expect
:
expect -c 'puts [clock format [
clock add [clock seconds] -5 minute] -format "%b %d %R"]'
或者python3
:
python3 -c 'import time; print(time.strftime("%b %d %R", time.localtime(time.time() - 5*60)))'