历史命令不显示 HISTFILE 中的所有行

历史命令不显示 HISTFILE 中的所有行

当我使用这个命令时,cat -n $(echo $HISTFILE) | grep -v "#"我得到了 4000 多行。 (grep 省略了添加到 histfile 的时间戳)

1 pwd
...
2017 cd ~
...
4033 git push

但是当我使用这个命令时,history我只得到 2000 多行。

1 18/09/19 11:00:38 cd ~
...
2017 30/10/19 09:41:50 git push

为什么我的历史命令省略了一半的行?

我怀疑时间戳$HISTFILE是罪魁祸首,但如何规避这种行为呢?还是怀疑有误?

我已经修改了命令env使用的变量history,如下所示:

export HISTFILESIZE=
export HISTSIZE=
export HISTFILE=~/.bash_eternal_history
export HISTTIMEFORMAT="%d/%m/%y %T "

我已经完成了这些修改,因为我想要拥有无限的历史记录和额外的时间戳。我想保留这些并使历史命令输出HISTFILE.

我正在使用操作系统 cat /etc/*release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

答案1

History 命令仅列出当前 bash 会话的历史记录,而该文件包含所有 bash 会话的历史记录。因此,会话中的运行历史记录很可能显示比文件更少的结果。此外,历史记录用于查找“最近”命令,因此根据 $HISTSIZE 限制长度(要增加环境中的 HISTSIZE,请参阅这次讨论)。

要更新特定会话中的历史记录以包含历史文件中的所有最新命令,请使用 -r 或 -n 运行历史记录。从手册页:

-n :将历史文件中尚未读取的历史行读取到当前历史列表中。这些是自当前 bash 会话开始以来附加到历史文件的行。

-r :读取历史文件的内容并将其追加到当前历史列表中。):

user@machine:~> history
994  ssh server
995  history --help
996  man history
997  history

仅返回 997 行...

user@machine:~> history -r

刷新...

user@machine:~> history

994  ssh server
995  history --help
996  man history
997  history
998  history -r
999  ping 10.10.10.10
1000  ping 10.10.10.1
...
1992  ssh server02
1993  history

现在列出 1993 个命令。因此包括您打开和使用的任何其他终端添加的历史记录,这将为您提供与读取原始文件(受 $HISTFILESIZE 限制)类似的输出(尾随 $HISTSIZE 行)。注意细微的差异... -n 读取当前 bash 会话行, -r 读取整个文件。

相关内容