在bash中的每个命令后执行命令

f12*_*6ck 10 linux bash shell ubuntu command-line

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

这可以帮助我理解当我离开键盘时命令执行了多少.

我知道我能做到

`DATE=`date +%d/%m/%Y\ %H:%M:%S` && echo $DATE`
Run Code Online (Sandbox Code Playgroud)

获取日期,但我不知道在bash上执行的每个命令之后如何能够运行此命令.

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

可能吗?

我应该编辑哪个文件?

例如:

$ wget google.com
15/07/2017 23:40:05
Run Code Online (Sandbox Code Playgroud)

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

$ wget google.com
15/07/2017 23:40:05 15/07/2017 23:40:11 
Program run for 00:00:06
Run Code Online (Sandbox Code Playgroud)

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

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

$ wget google.com && `DATE=`date +%d/%m/%Y\ %H:%M:%S` && echo $DATE`
Run Code Online (Sandbox Code Playgroud)

Wil*_*ell 9

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

trap date DEBUG
Run Code Online (Sandbox Code Playgroud)

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

PROMPT_COMMAND=date
Run Code Online (Sandbox Code Playgroud)

  • 这很酷,但陷阱似乎在执行命令之前运行. (2认同)

PSk*_*cik 6

这正是这样做的:

PROMPT_COMMAND+=$'\n'"date +%d/%m/%Y\ %H:%M:%S"
Run Code Online (Sandbox Code Playgroud)

PROMPT_COMMAND 中的字符串在每个命令之后都会被评估。您只需要将 date 命令添加到您已有的任何内容中。($'\n' (换行符)是一个比;连续两次;会给你一个语法错误更强大的连接器)