在终端上显示时间

 原文链接: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)ANSIEscapeSequences"\e[s""\e[0;((COLUMNS-27))H"是指迁移光标到指定的坐标(0, ((COLUMNS27)))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 &
 
 
posted @   叕叒双又  阅读(75)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体
历史上的今天:
2022-06-12 每日感悟20220612
2021-06-12 难道父母比希望你快乐吗?
2017-06-12 UML学习倒腾记
点击右上角即可分享
微信分享提示