像Bash中的数字时钟一样显示日期和时间

时间:2016-09-23 01:25:45

标签: bash shell datetime

命令date +'%a %b %e %Y%n%I:%M %p'以格式显示日期和时间:

Thu Sep 22 2016
08:02 PM

我试图想办法在时间变化时更新日期和时间。我唯一能想到的就是做这样的事情:

#!/bin/bash

while true
do 
    date +'%a %b %e %Y%n%I:%M %p'   
done | awk '!seen[$0]++'

这会产生如下输出:

Thu Sep 22 2016
08:02 PM
08:03 PM
08:04 PM

有没有办法通过覆盖旧时间来显示时间变化,以便08:02在同一行上更改为08:03,从而使日期和时间显示为常规数字时钟?< / p>

2 个答案:

答案 0 :(得分:2)

仅在日期更改时更新第一行,每秒更新第二行:

while :; do
  # store start date in variable
  printf -v start_day '%(%a %b %e %Y)T'
  day=$start_day

  clear
  echo "$day"
  while sleep 1 && [[ $start_day = $day ]]; do
      printf -v day '%(%a %b %e %Y)T'
      printf '\r%(%I:%M %p)T'
  done
done

使用printf %()T限制了与最近的bash 4.x的兼容性,但大大提高了性能(避免每次我们想要更新时间时都需要启动外部程序)。

答案 1 :(得分:2)

您可以使用tput移动光标:

date +'%a %b %e %Y%n%I:%M %p'
while sleep 1
do
    tput cuu 2
    date +'%a %b %e %Y%n%I:%M %p'
done