我想在运行每个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`
答案 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文件中,因此每次打开终端时都不必输入它们。