lithistオプションのため、bashの複数行の記録が壊れていました。

lithistオプションのため、bashの複数行の記録が壊れていました。

私はlithistオプションを有効にしましたが、これはbash履歴を複数行に保存しましたが、ある日lithistオプションは機能しませんでした。

lithist を有効にすると、1 つの履歴エントリに複数の行を保存できます。括弧内にいくつかのコマンドを入力する場合:

~:$ (
> 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履歴ファイルの形式が破損するためです。一度は、履歴ファイルの開始行の一部を削除してからシェルを再起動したところ、履歴が復元されました。

しかし、今回は履歴ファイル全体を削除しても回復できません。

私の設定:

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 を使用する他のコンピュータでは修正できます。

関連情報