当我使用这个命令时,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 读取整个文件。