这个问题困扰了我几天,这是我编辑的帖子,其中包含我所学到的所有材料。具体来说,我的目标是在BASH中的提示旁边显示时钟。就像Radu Radeanu在他的回答中提到的那样,关键是找到一个函数或变量,该函数或变量能够不断刷新命令提示符或重绘屏幕,而不会干扰屏幕或键入的内容。虽然,这可以通过while循环来实现,如G_P所示,但是使用tput函数不断刷新屏幕时,刷新时我的屏幕上的任何文本都会混乱。通过修改G_P发布的代码,我已经接近实现OP的要求,但是我仍然相信Radu的答案与OP想要的最接近。事不宜迟,这里是我的一些事情
#1,我的首选解决方案:终端多路复用器
终端多路复用器是一种软件,可以将终端屏幕分为两个或多个屏幕。我想特别注意Byobu码头。这个基于ncurses的终端仿真器,允许您显示时间,CPU百分比,内存以及其他所有指标。在我的byobu终端的屏幕截图中,您可以看到CPU温度,电池百分比,互联网连接质量,CPU频率,RAM,日期以及时间。如果您最关心的是在航站楼期间不断监控这些情况,那么Byobu是您的最佳选择。实际上,我非常喜欢它,我将其设置为在登录tty时自动加载。唯一的怪癖是,在tty中,您实际上无法合并单独的窗口-只能在使用F3和F4键的选项卡之间切换。
涉及复用窗口的另一种解决方案是使用splitvt
,将屏幕分为两部分。您可以运行终端时钟,例如tty-clock
,使用带日期的watch命令,也可以使用脚本自己编写一个。以后再说。在屏幕截图中,您可以在顶部看到带有普通bash提示的拆分的一部分,而在下方的屏幕中,您可以看到正在运行的脚本,该脚本不断地date
用clear
command 刷新command的输出。
#2,虽然Do Loop和tput
这可能是与提出问题的人想要用bash实现的最接近的地方。
G_P发布了一个很好的解决方案,涉及while do
and tput
命令。但是在G_P的代码中,有两件事我不喜欢。第一,时钟在提示的右边,第二,因为睡眠周期是1秒(请参阅原始代码,其中显示了睡眠),所以屏幕每秒钟重绘一次,这弄乱了我的输出。我所做的是用\ n运算符将bash提示符编辑为低1行,并更改G_P的代码,以便tput运算符将时钟定位在提示符上方,并每60秒刷新一次;这样我就可以看到小时和分钟(而且我并不十分在意分钟),而时钟的循环不会弄乱我的屏幕。首先,这是我的提示:
PS1='${debian_chroot:+($debian_chroot)}\n[*\u@Ubuntu*]\n $(date) :\w\$ '
这是G_P的修改后的代码: enter code here
while sleep 60;do tput sc;tput cup 0 0;date +%R;tput rc;done &
小修改:我注意到上面的这段代码有时并不会立即生效。这是一个更好的版本:while true; do tput sc;tput cup 0 0;date +%R;tput rc; sleep 60; done &
该时钟首先显示在屏幕上,然后让bash知道经历60秒的睡眠周期
请注意,tput cup 0 0将时钟放置在屏幕的右上角,在提示的正上方,sleep 60将睡眠周期更改为60秒,因为这样一来,我只能监视小时和分钟,而不是每秒。这样,无论我在屏幕上显示的任何文本在很大程度上都不会受到影响(仅当我碰巧在同一时间刷新时钟运行命令时)。
PS1行已经在您的.bashrc配置文件中,因此您只需对其稍作调整即可。while do循环应添加到同一文件中的某个位置,最好以#注释结尾,这是您最初添加的内容。而且,别忘了总是像这样备份任何文件,以防万一您制作bubu并需要回到原来的状态。
#3,脚本编写及其他
这部分仅适用于想看时间的人。对于那些想要不断监视它的人,#1和#2是首选。
因此,正如我们已经看到的,while循环非常有用。这是您可以使用while do loop,date和sleep命令创建时钟的方法。
按回车/回车键,您基本上会在清除的屏幕上每秒看到日期命令的输出。如果您不想每次都输入所有内容,请将所有这些内容转换为脚本:
#!/bin/bash
while true
do
clear;date
sleep 1
done
现在,您可以在一个bash实例中使用splitvt运行该脚本,而在另一个实例中运行。
另一个解决方案是watch -n1 date
命令,它将以1秒钟的时间连续执行日期命令。
结束语:在尝试找到该问题的答案时,我学到了一些东西,希望我的发现对您有所帮助,并且希望我能够为这个问题做出贡献。Byobu终端恕我直言是最好的解决方案,但请您自己决定,进行一些研究并选择最适合您的方法。
我在研究时发现的一些东西:
我的原始帖子,简约解决方案:编辑〜/ .bashrc文件。我更喜欢用nano编辑它,所以
nano ~/.bashrc
这是我自己编辑的文件的一部分:
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\$'
else
# PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]:\w\$ '
PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]\t:\w\$ '
fi
在else语句之后,第一行用#注释掉(这是我的旧提示),现在第二行是您想要的行,特别是\t
运算符。以24小时制显示运行时间。有关更多信息,请查看this。另外要注意的一点是,我在使用其他内容,因为我没有使用彩色提示。
PS:请让我知道我是否应该在答案中添加任何内容或以任何方式对其进行编辑,但是在大多数情况下,我认为这是我可以想出的最确定的答案,至少我个人不会添加任何内容新的。
$PS1
(提示)变量设置为有时间,但是我不确定是否会更改。