使用时间戳打印最后一个 bash 命令的最简单标准方法

mmm*_*mmm 8 bash command-history

我想用它的时间戳打印最后一个 bash 命令。history 1显示历史命令本身。我需要在很多机器上使用它,所以它不应该依赖于任何自定义配置。肯定有一些我缺少的简单命令来执行此操作,例如lastcmd或某事:)

请注意,它fc -l -1显示了最后一个命令但没有时间戳,而且太复杂了,无论如何都不能经常输入。

只是为了澄清,我正在寻找一些标准且简单的方法来执行此操作,因为我需要在许多服务器上使用它,并且对它们进行全部自定义或创建自定义函数是不可行的。另外我需要手动输入这个命令,所以它应该非常简单。

似乎 HISTCONTROL=ignoreboth 是我需要访问的服务器上的默认设置,因此我可以使用:

 history 1 
Run Code Online (Sandbox Code Playgroud)

(以空格为前缀的历史命令)不会将其放入历史记录中,因此它正确显示了最后一个命令。

HISTTIMEFORMAT虽然默认情况下没有设置,所以它不是一个完整的解决方案。有没有更简单的方法?

ter*_*don 9

正如您所指出的,history 1打印history命令本身,因为这是您运行的最后一个命令。要获得上一个,您需要history 2

$ touch foo
$ history 2
$ history 2
19950  touch foo
19951  history 2
Run Code Online (Sandbox Code Playgroud)

因此,要在不计算history自身的情况下获取上一个命令,请通过head -n1

$ history 2 | head -n1
19952  touch foo
Run Code Online (Sandbox Code Playgroud)

然后,以您想要的任何格式添加时间戳(请参阅man 3 strftime可用格式):

$ HISTTIMEFORMAT="%F %H:%m:%S " history 2 | head -n1
19959  2016-06-11 15:06:08 touch foo
Run Code Online (Sandbox Code Playgroud)

  • @AndreaLazzarotto 抱歉,如果设置了 `HISTTIMEFORMAT` 变量,它只会写在 `~/.bash_history` 中。尝试`export HISTTIMEFORMAT="%F %H:%m:%S"; 历史 -a; 例如尾部 .bash_history`。因此,全局设置`HISTTIMEFORMAT`(比如在`~/.profile` 中)应该足以让这自动发生。 (2认同)

mmm*_*mmm 0

bash 似乎并没有提供任何简单的方法来获取执行最后一个命令时的时间戳。

如果您可以自定义服务器 bash 配置,您可以根据 @terdon 的答案创建自定义 bash 函数。