每次在终端中启动命令之前如何获得时间?

Bus*_*ere 3 command-line

我希望每次在终端中运行命令时,我都会在我的术语中显示时间,然后执行命令。

Tsh*_*dau 9

你可以跑

 PROMPT_COMMAND="date"
Run Code Online (Sandbox Code Playgroud)

在您的终端上,每次在您的终端上运行命令时,当前的日期和时间都会打印在您的终端上。正如@pa4080 所建议的,要使其永久化,请将其添加PROMPT_COMMAND="date"到您的 ~/.bashrc 文件中。

从人bash:

PROMPT_COMMAND

如果设置,该值在发出每个主要提示之前作为命令执行。

我认为PROMPT_COMMAND=当在终端上运行命令时,您可以使用相同的命令来运行您想要运行的几乎“任何东西”。

如果您使用tmux,它还会在角落显示时间:

多路复用器

  • 但这不会显示日期/时间*程序终止时*并返回到 CLI 提示符吗? (3认同)

ilk*_*chu 5

假设您正在运行 Bash,您可以设置PROMPT_COMMAND打印提示时执行的命令。同样,您可以通过在提示符中包含命令替换来运行任意命令:

$ PS1='[$(date +"%T")] \u@\h \w\$ '
[22:17:54] user@somehost /tmp$ 
Run Code Online (Sandbox Code Playgroud)

但这很常见,Bash 支持它现成的

\D{format}
传递格式strftime(3)并将结果插入到提示字符串中;空格式会产生特定于区域设置的时间表示。需要使用大括号。

所以,与之前类似

$ PS1='[\D{%T}] \u@\h \w\$ '
Run Code Online (Sandbox Code Playgroud)

但那些打印提示的时间。这可能需要相当长的时间才能执行下一个命令。要获取命令启动的时间,我们可以使用陷阱DEBUG,该陷阱为每个执行的命令行运行一次。

$ starttime() { date +"Command started at %T"; }
$ trap starttime DEBUG
$ ls -l /dev/null
Command started at 22:25:07
crw-rw-rw- 1 root root 1, 3 Jul 18 21:46 /dev/null
Run Code Online (Sandbox Code Playgroud)

陷阱DEBUG还可以使用$BASH_COMMAND包含正在执行的命令的变量,但这可能不是很有用,因为无论如何命令行在提示符下都是可见的。