我曾经启用 lithist 选项,这使得 bash 历史记录存储在多行中,但是有一天,lithist 选项不起作用。
启用 lithist 意味着您可以在一个历史记录条目中存储多行。如果您键入一些用括号括起来的命令:
~:$ (
> echo hey
> echo bye
> )
hey
bye
然后按ctrl-p
,你会看到这个:
~:$ (
echo hey
echo bye
)
在我糟糕的一天, lithist 坏了,人们会看到多行分成多个条目
# press ctrl-p
~:$ )
# press ctrl-p again
~:$ echo bye
这个问题之前出现过几次。这通常是因为 的大小~/.bash_history
超出了变量的大小HISTFILESIZE
,而 bash 截断了~/.bash_history
,这使得历史文件的格式被破坏。我曾经删除历史文件的一些开头行,然后重新启动 shell,历史记录就会恢复。
但是,这次即使我删除整个历史文件,它也无法恢复。
我的配置:
HISTSIZE=1000
HISTFILESIZE=8000
shopt -s cmdhist lithist
当 lithist 工作时,命令的输出history
应如下所示:
4519* 2019-08-24 15:46:05 (
echo hey
echo bye
)
4520 2019-08-24 16:00:21 history
4521 2019-08-24 16:00:23 history | less
当 lithist 被破坏时,历史记录的输出也被破坏:
1 2019-08-24 14:25:04 \rm .bash_history
2 2019-08-24 14:25:13 (
3 2019-08-24 14:42:26 echo a
4 2019-08-24 14:42:26 echo c
5 2019-08-24 14:42:26 )
但是,我的历史文件看起来没问题:
#1566627904
\rm .bash_history
#1566627913
(
echo a
echo c
)
#1566627926
echo bye
此行为出现在 CentOS 6.10 上,并且无法修复,但可以在另一台具有 debianstretch 的计算机上修复。