如何从历史记录中获取最后 N 个命令?

fed*_*qui 62 command-line bash command-history

我想看看我的history. 我以为history | tail -n 5会成功,但我注意到多行命令与它所拥有的行数一样多。

$ echo "hello
how are you"
$ history | tail -2
how are you"
1051  history | tail -2
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:我是否必须解析命令的输出才能完成此操作?

fed*_*qui 75

我找到了!

历史 [n]

n 的参数仅列出最后 n 行。

$ echo "hello
how are you"
$ history 2
1060  echo "hello
how are you"
1061  history 2
Run Code Online (Sandbox Code Playgroud)

  • `fc -l -2` 也可以工作(但不会将当前的 `fc -l -2` 添加到输出中) (7认同)
  • 这似乎适用于 `tcsh`、`yash` 和 `bash`。您可能希望为其他 shell 提供相应的信息,例如 `zsh`、`fish`、`ksh​​` 和 POSIX 方式。 (5认同)

小智 14

您还可以使用负数,例如:

history -1
Run Code Online (Sandbox Code Playgroud)

或者使用一个范围(最后 10 个):

history -1 -11 
Run Code Online (Sandbox Code Playgroud)

  • 对我来说 bash 5.0.11 不起作用。 (3认同)
  • 这就是zsh的方式! (2认同)

Ale*_* K. 6

当您应用历史记录时,它也会显示最后的历史命令。为了防止空间浪费,这样的别名可能很方便:

alias hs=' history 16 | head -n 15'
Run Code Online (Sandbox Code Playgroud)

(命令本身history 16 | head -n 15

另一个有用的历史别名:

  alias hsg=' history | grep ' 
Run Code Online (Sandbox Code Playgroud)

(当ctr+R太小时无法选择时)

_history前面的空格将运行历史中未写入的命令

fc -l # 还将列出最后 16 个命令(以及更多)

  • 虽然这是事实,但这些都没有解决眼前的问题。 (3认同)