每个bash命令之前的命令


Answers:


37

很抱歉之前的回答错误,我误解了您的问题。

要在外壳程序上执行的每个命令之前增加时间,可以执行以下操作

bind 'RETURN: "\e[1~time \e[4~\n"'

这将重新绑定返回键。现在,每当您按回车键而不是写换行符\ n时,它将转到该行的开头,输入文本“时间”和一个空格,转到该行的末尾并输入换行符\ n,从而生成所需的影响。

如果您不想牺牲Enter键,则可以通过绑定如下命令来制作“第二”基准输入键,例如F12

bind '"\e[24~": "\e[1~time \e[4~\n"'

现在绑定F12而不是替换返回键。

所有这些的背景是bash使用GNU readline读取命令。因此,readline将是进一步操作命令等的良好起点。


1
+1个不错的解决方案!我喜欢将基准测试Enter键与常规Enter键分开的想法。
奎克吉

这是一个聪明的主意。如何在每个命令之前将其概括为执行用户定义的函数?我不知道如何在同一绑定中结合bash代码和readline函数。
吉尔(Gilles)'所以

这不会在Mac中运行吗?我在终端中运行了命令,而我的Enter键现在似乎什么也没做。
akki

6

我意识到这超出了此问题的范围,但是...

zsh(这是我所知的一个超集的bash),如果设置在下面的变量.zshrc文件:

export REPORTTIME=5

每条超过5秒(我很确定)的命令都会显示的输出time。所有更快完成的命令都不会。在那种情况下,人们并不在乎,所以最好不要把事情弄乱。zsh当您使用它时,还可以享受许多其他很酷的功能。


不错的提示。虽然zsh的肯定具有的功能的超集庆典,它的语法不是语法的一个超集庆典,所以它不是替换“在下降”。
克里斯·约翰森


0

PS1似乎是执行类似操作的标准方法。


2
它修改显示,而不是实际执行的命令。
user1686 2010年

@grawity对-但这确实可以为您提供所需的信息……每一行之前都有时间。
杰森·桑德拉姆

3
这与操作完全不同time(它测量命令执行需要多长时间)。
user1686

@grawity,我想您是对的-您必须自己进行相减。看起来@Jrobert有相同的想法。
杰森·桑德拉姆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.