仅显示 bash 历史记录中的一定范围的条目

仅显示 bash 历史记录中的一定范围的条目

是否可以为“历史记录”命令设置一个固定数字,以仅显示一定数量的历史项(例如 100),而不是从一开始的所有内容?

答案1

history n仅打印n历史记录的行。例如:

$ history 4
 2000  type history
 2001  help
 2002  help history
 2003  history 4
$

所以我们可以在你的中创建一个别名.bashrc

alias h="history 100"

help history

history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]
    Display or manipulate the history list.

    Display the history list with line numbers, prefixing each modified
    entry with a `*'.  An argument of N lists only the last N entries.

如果你想保留大量的历史记录,这很有用,甚至可能是无限一个。 和HISTCONTROL=ignoreboth:erasedups反向增量搜索,这是您实际运行命令的特殊场合history

答案2

设置HISTFILESIZE并且HISTSIZE 可以限制历史命令的大小。

例如HISTFILESIZE=100HISTSIZE=100。它将限制历史文件存储 100 行,并将HISTFILE当前会话命令存储在内存中 100 行。

当 shell 启动时,历史记录将从变量指定的文件HISTFILE(默认为 ~/.bash_history)中初始化。如有必要,将截断由值指定的文件HISTFILE,以使其包含的行数不超过变量值指定的行数HISTFILESIZE

您可以在文件中添加HISTFILESIZE=100 和。将 100 更改为您想要的数字。HISTSIZE=100~/.bashrc

解释

HISTFILESIZE=10HISTSIZE=10

  1. 您开始您的会话。
    1. 您的 HISTFILE(存储 bash 命令历史记录的文件)被截断为包含 HISTFILESIZE=10 行。
  2. 你写了50行。
  3. 在您的 50 条命令结束时,只有第 41 至 50 条命令存在于历史列表中,其大小由 HISTSIZE=10 决定。
  4. 您结束会话。
    1. 假设histappend未启用,命令 41 到 50 将保存到您的 HISTFILE 中,该文件现在包含它在开始时持有的 10 个命令加上 10 个新写入的命令。
    2. 您的 HISTFILE 被截断为包含 HISTFILESIZE=10 行。
  5. 您的历史记录中现在有 10 条命令 - 您在刚刚完成的会话中输入的最后 10 条命令。
  6. 当您开始新的会话时,您将从 1 开始,并且 HISTFILE 的 HISTFILESIZE=10。

HISTFILESIZE=10HISTSIZE=5

  1. 您开始您的会话。
    1. 您的 HISTFILE(存储 bash 命令历史记录的文件)被截断为最多包含 HISTFILESIZE=10 行。
  2. 你写了50行。
  3. 在您的 50 条命令结束时,只有第 46 至 50 条命令存在于历史列表中,其大小由 HISTSIZE=5 决定。
  4. 您结束会话。
    1. 假设histappend未启用,命令 46 到 50 将保存到您的 HISTFILE 中,该文件现在包含它在开始时持有的 10 个命令加上 5 个新写入的命令。
    2. 您的 HISTFILE 被截断为包含 HISTFILESIZE=10 行。
  5. 您的历史记录中现在有 10 条命令 - 其中 5 条来自之前的会话,最后 5 条是您在刚刚完成的会话中输入的。
  6. 当您开始新的会话时,您将从 1 开始,并且 HISTFILE 的 HISTFILESIZE=10。

HISTFILESIZE=5HISTSIZE=10

  1. 您开始您的会话。
    1. 您的 HISTFILE(存储 bash 命令历史记录的文件)被截断为最多包含 HISTFILESIZE=5 行。
  2. 你写了50行。
  3. 在您的 50 条命令结束时,只有第 41 至 50 条命令存在于历史列表中,其大小由 HISTSIZE=10 决定。
  4. 您结束会话。
    1. 假设histappend未启用,命令 41 到 50 将保存到您的 HISTFILE 中,该文件现在包含它在开始时持有的 5 个命令加上 10 个新写入的命令。
    2. 您的 HISTFILE 被截断为包含 HISTFILESIZE=5 行。
  5. 您的历史记录中现在有 5 条命令 - 您在刚刚完成的会话中输入的最后 5 条命令。
  6. 当您开始新的会话时,您将从步骤 1 开始,并且 HISTFILESIZE=5。

这个很棒的解释来自:stackoverflow.com

相关内容