如何在命令提示符之前在终端中显示正在运行的时钟

Sau*_*mar 48 command-line gnome-terminal

我更喜欢使用终端并且大部分时间都在使用它。我正在寻找一种在并行使用终端时查看时间的方法。时间一过,时间就会自动改变。如果它可以显示在我的命令提示符下,那就太棒了。

如果这是我在终端中的命令提示符:

saurav@saurav-P4I45Gx-PE:~$
Run Code Online (Sandbox Code Playgroud)

然后我想将时钟(时间)视为:

saurav@saurav-P4I45Gx-PE[06:27:01]:~$
Run Code Online (Sandbox Code Playgroud)

或者

saurav@(06:27:01):~$
Run Code Online (Sandbox Code Playgroud)

或任何其他格式。06:27:01时间在哪里。我想要的只是显示秒过去时发生变化的时间。

那么有没有办法实现这一目标?

Rad*_*anu 90

我不确定使用默认的 bash shell 实现这一点是否如此简单(但我并不是说这是不可能的)。您可能需要一个命令/函数,它能够每秒刷新命令提示符,而不会干扰您在提示符上键入的任何内容。

所述的Z shell(zsh中)具有一个内置的命令,称为zle,其中,与使用时reset-prompt的说法,力的提示被重新扩展,则重新显示编辑缓冲器。

如果您想尝试,请使用以下步骤:

  1. 使用以下命令安装 Z shell:

    sudo apt-get install zsh
    
    Run Code Online (Sandbox Code Playgroud)
  2. 当您zsh第一次运行时,请选择0何时被问到。

  3. 编辑~/.zshrc文件并添加以下几行:

    setopt PROMPT_SUBST
    PROMPT='%B%F{red}%n@%m%f%F{yellow}[%D{%L:%M:%S}]%f:%F{blue}${${(%):-%~}}%f$ %b'
    TMOUT=1
    
    TRAPALRM() {
        zle reset-prompt
    }
    
    Run Code Online (Sandbox Code Playgroud)

    保存文件并关闭它。

  4. 在您的终端中,当您仍在使用 zsh 时,运行source ~/.zshrc或简单zsh地重置您的提示。现在你的提示应该是这样的:

    saurav@saurav-P4I45Gx-PE[1:25:21]:~$
    
    Run Code Online (Sandbox Code Playgroud)

    带有一些颜色。

  5. 如果您喜欢它,请运行chsh -s /bin/zsh以将您当前的 shell 更改为/bin/zsh(此更改需要重新登录才能生效)。

  6. 运行exit,如果你想从外壳的zsh退出。

这是来自我的终端的 15 秒截屏视频:

在命令提示符之前在终端中运行时钟

  • 截屏的奖励积分。确实很酷的东西。 (5认同)

g_p*_*g_p 37

如果要在终端中显示运行时间,可以使用此命令。它将在终端的右上角显示时间。

  while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-11));echo -e "\e[31m`date +%r`\e[39m";tput rc;done &
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但请注意,有时使用此命令显示时间可能会与终端中存在的文本重叠。因此,请谨慎使用此命令。

另一种方法可能是在 PS1 中使用控制字符

[guru@guru-pc ~]$  PS1='\[\u@\h \T \w]\$'

[guru@guru-pc 11:06:16 ~]$
Run Code Online (Sandbox Code Playgroud)

但是在这种方法中,您的时间只有在按 Enter 后才会刷新。

如果您想永久使用上述方法,请在您的~.bashrc文件中添加上述命令(您喜欢的命令或两者)。


ter*_*don 14

如果您只想显示时钟,只需使用date

while :; do date +%r; sleep 1 ; done
Run Code Online (Sandbox Code Playgroud)

这将每秒显示时间,直到您用 停止它CtrlC。如果您希望它在同一行上(上面将每秒打印一个新行),请执行以下操作:

while :; do printf '%s\r' "$(date +%r)"; sleep 1 ; done
Run Code Online (Sandbox Code Playgroud)