在终端上显示时间
原文链接:https://kodango.com/put-a-console-clock-in-top-right-corner
在终端上显示时间:Put a console clock in top right corner。文中给出了两种方法,一种是利用ANSI Escape Sequences,另外一种是通过tput这个命令。
第一种方法
命令如下:
while true; do echo -ne "\e[s\e[0;$((COLUMNS-27))H$(date)\e[u"; sleep 1; done &
效果图见:
命令解释:
1.首先这串命令是包含在while循环中的,每隔1秒更新一次;
while true; do cmd; sleep 1; done &
2.echo选项解释,-e的意思是可以显示转义序列,而-n是指不打印回车;
3.\e[s\e[0;$((COLUMNS-27))H$(date)\e[u
是这里的重点,下面是说明:
$(date)是打印当前时间,也是这里显示的内容,其余的就是上面说说的ANSI Escape Sequences;其中,"\e[s"的意思是指保存当前光标位置;"\e[0;$((COLUMNS-27))H"是指迁移光标到指定的坐标(0, $((COLUMNS-27))),这里$COLUMNS保存的是当前终端窗口的列数;"\e[u"与"\e[s"是相对的,表示恢复之前保存的光标位置。
第二种方法
命令如下:
while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done &
命令效果同上,这里主要利用tput这个命令来替换上面的ANSI Escape Sequences,步骤都是差不多的:
1. 首先保存当前光标位置(save cursor):tput sc
;
2. 获取当前终端窗口的列数:tput cols
;
3. 设定光标要移动到目标位置:tput cup 0 $(($(tput cols)-29))
;
4. 最后恢复上次保存的光标位置(restore cursor):tput rc
;
是不是觉得用tputc更加清爽,可读性更加,而且tput命令的功能不仅限与此,它还可以做更多终端的操作,比如设置文本的颜色、粗体等等,具体可以看它的man手册,而tput可以设置的属性可以参考man terminfo。当然,网上应该也有一些不错的参考文章,这里推荐一篇IBM上的tput入门。
这种做法可以推广,你可以选择自己想显示的内容,比如当前系统的一些负载状况:
while true; do tput sc; tput cup 0 $(($(tput cols)-74)); awk '{print $1,$2,$3}' /proc/loadavg; tput rc; sleep 10; done &