解決策 1:
最初に bash 履歴の動作を理解するには、次のことを知っておく必要があります:
<オール>デフォルト設定を使用すると、履歴に関する bash セッションのライフサイクルは次のようになります:
<オール>あなたが観察した一見非決定論的な動作は、ほとんどの場合、履歴ファイルの内容が常に最後に閉じられた bash セッションの履歴であり、bash が起動時に履歴ファイルのみを読み取るためです。
起動とシャットダウンのプロセスの詳細については、bash のマニュアルを参照してください。
デフォルト設定とは、bash のデフォルト設定を意味することに注意してください。ディストリビューションが .bashrc
を提供している可能性があります (または /etc/bash.bashrc
) により、この動作が変更されます。
シェルオプション histappend
を有効にする 履歴ファイルを上書きする代わりに追加するように bash に指示できます。 histappend
を有効にできます コマンド shopt -s histappend
を使用 .このオプションを常に有効にするには、コマンドを .bashrc
に入れる必要があります (または他の初期化ファイル)。 shopt
についてもっと読む bashマニュアルのコマンド
histappend
を有効にすることに注意してください 一見非決定論的な動作を大幅に減らすことはありません。これは、すべての bash セッションがまだメモリ内に独自の履歴を持っているためです。ほとんど同期された bash 履歴を持つことが可能です。スタック オーバーフロー時に、すべての bash プロセスがほぼ同期された履歴を持つスレッドを取得する方法についてのガイドがあります。
組み込みコマンド history
を使用 履歴をファイルからメモリに読み取るか、メモリからファイルに書き込むように bash に明示的に指示できます。例:history -r
ファイルの内容を読み取り、メモリ内の履歴に追加します。 history -w
現在の履歴をメモリからファイルに書き込み、以前の内容を上書きします。これは、基本的にシャットダウン中に発生することです。 history
についてもっと読む bashマニュアルのコマンド
完全を期すために、履歴の動作を変更する内部変数のリストを次に示します。
HISTFILE
:履歴を読み書きするファイル。HISTFILESIZE
:履歴ファイルの最大行数。HISTSIZE
:メモリ内の履歴の最大行数。HISTCONTROL
、HISTIGNORE
、HISTTIMEFORMAT
:この議論には関係ありません。詳細については、bash のマニュアルをお読みください。
解決策 2:
http://www.gnu.org/software/bash/manual/bashref.html#Using-History-Interactively
いずれかの端末で履歴ファイルの書き込み方法を操作できる場合があります。つまり、履歴を保存する端末で「history -a」または「history -w」を実行し、次に「history -r」を端末で実行します。他の端末。何をしたいかによります。