在终端上显示时间
原文链接: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
是这里的重点,下面是说明:
((COLUMNS-27))H"是指迁移光标到指定的坐标(0, 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 &
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体
2022-06-12 每日感悟20220612
2021-06-12 难道父母比希望你快乐吗?
2017-06-12 UML学习倒腾记