2017-07-15 119 views
2

我想在每次运行bash命令后打印日期。在bash中的每个命令之后执行命令

这可以帮助我了解多少命令了,当我从键盘远离执行

我知道我可以做

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

得到的日期,但我不知道如何或即使在bash上执行的每个命令之后都可以运行此命令。

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

有没有可能?

我应该编辑哪个文件?

例如:

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

我会很高兴,如果我也可以介绍一下这款以下feauture:

$ 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` 

感谢

+0

也许这可能会帮助你[https://unix.stackexchange.com/q/12059](https://unix.stackexchange。 com/q/12059) – Jibbow

+0

你也可以在你的'PS1'提示符中包含日期,以便在每个命令运行之前和之后总是在你的前面。你可以使用'\ D {format}'格式传递给'strftime(3)'。非常方便。还有许多时间格式。 –

回答

4

之前的每一个命令进入,设置DEBUG陷阱执行CMD。例如。

trap date DEBUG 

要发出一个提示,设置PROMPT_COMMAND前执行该命令:

PROMPT_COMMAND=date 
+0

这很酷,但陷阱看起来在命令执行之前运行。 – Ereli

+0

正是我想要的。我怎样才能使PROMPT_COMMAND =日期执行每次我打开终端为默认?因为你的解决方案有效,但是我只有在打开终端时才能输入它......如何消除......一次:)我很懒!感谢您将 – f126ck

+0

@ f126ck放入您的** .bashrc **文件。 –

0

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

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

看到这个arch wiki page或只是谷歌bash提示自定义。

要增加花费在执行程序时,只需在命令前加上时间

$ time wget google.com 

它会给你输出这样

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

,你可以得到更多的偷懒和要不要命令每次运行它时都觉得自己打字时间,只需创建别名。

alias wget="time wget" 

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

3

这正是这么做的:

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

在PROMPT_COMMAND的字符串获取每个命令后评估。您只需要将日期命令添加到您已有的任何内容中即可。 ($'\n'(新行)是一个有些更强大的木匠比;为连续两次;会给你一个语法错误)

2

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

例如:

PS1='\[email protected]\h[\D{%F} \D{%T}]\w\$ ' 

,或者颜色:

PS1='\[\033[01;32m\]\[email protected]\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\]\$ ' 

将显示:

[email protected][2017-07-16 00:01:17]~/somedir$ 

注意,在第二种情况下(彩色),我们有一个有效的ISO8601时间戳,在中间有一个“隐藏”日期/时间分隔符T。如果您使用鼠标选择它,则T可见并且可以复制。 (也双击将选择完整的时间戳,不仅日期或时间。)