在bash

时间:2017-07-15 21:51:12

标签: linux bash shell ubuntu command-line

我想在运行每个bash命令后打印日期。

这可以帮助我理解当我离开键盘时执行命令的程度。

我知道我能做到

`DATE=`date +%d/%m/%Y\ %H:%M:%S` && echo $DATE`

获取日期,但我不知道在bash上执行的每个命令之后是否可以运行此命令。

我也有兴趣在 每个命令之前运行相同的命令 ,这样我就可以知道命令花了多长时间。

有可能吗?

我应该编辑哪个文件?

例如:

$ wget google.com
15/07/2017 23:40:05

我很高兴,如果我还能介绍以下这个特色:

$ wget google.com
15/07/2017 23:40:05 15/07/2017 23:40:11 
Program run for 00:00:06

第一个日期是我运行程序的时候,第二个是程序终止时第三个是自我解释的。

如您所知,我不想每次都打字

$ wget google.com && `DATE=`date +%d/%m/%Y\ %H:%M:%S` && echo $DATE`

4 个答案:

答案 0 :(得分:7)

要在输入每个命令之前执行cmd,请在DEBUG上设置陷阱。例如

trap date DEBUG

要在发出提示之前执行该命令,请设置PROMPT_COMMAND:

PROMPT_COMMAND=date

答案 1 :(得分:4)

这正是如此:

PROMPT_COMMAND+=$'\n'"date +%d/%m/%Y\ %H:%M:%S"

每个命令后都会对PROMPT_COMMAND中的字符串进行评估。您只需要将date命令添加到您已经拥有的任何内容中。 ($'\n'(换行符)是一个比;更强大的木匠,因为连续两个;会给你一个语法错误)

答案 2 :(得分:2)

您可以通过PS1变量为提示添加日期/时间。您可以使用date命令,但使用supported special characters更有效,例如日期\d\D{strftime-fmt}

例如:

PS1='\u@\h[\D{%F} \D{%T}]\w\$ '

或者,用颜色:

PS1='\[\033[01;32m\]\u@\h\[\033[00m\][\[\033[02;33m\]\D{%F}\[\033[08m\]T\[\033[00m\]\[\033[02;33m\]\D{%T}\[\033[00m\]]\[\033[01;34m\]\w\[\033[00m\]\$ '

将显示:

user@host[2017-07-16 00:01:17]~/somedir$

请注意,在第二种情况下(带颜色),我们有一个有效的ISO8601时间戳,其中包含"隐藏"中间的日期/时间分隔符T。如果您使用鼠标选择它,T可见并可以复制。 (同时双击将选择完整的时间戳,而不仅仅是日期或时间。)

答案 3 :(得分:1)

要在每个命令后打印时间戳,只需修改PS1提示并向其添加日期即可。这里唯一的问题是它会告诉你命令何时结束并显示新提示的时间。因此,如果您的提示长时间打开,只需按Enter键以捕获开始时间,然后再运行命令。

PS1="\D{%F %T} \$ "

请参阅此arch wiki page或google bash提示自定义。

添加执行程序所花费的时间只需在命令之前添加时间

$ time wget google.com

它会为您提供这样的输出

real 0m0.177s
user 0m0.156s
sys 0m0.020s

你可以变得更加懒惰,并且对于每次运行时都不想输入时间的命令,只需创建别名。

alias wget="time wget"

因为bash别名在其他命令之前运行,所以即使它看起来像递归也可以这样做。然后你将按照习惯来调用它 当然,别名和提示设置可以放在.bashrc文件中,因此每次打开终端时都不必输入它们。