回答:
履歴項目が表示されない原因として最も可能性が高いのはHISTFILE
、何も設定しないかHISTSIZE
ゼロに設定することではなく、同じマシンに2回ログインし、2番目のbashインスタンス(ほとんどまたは何もしなかった)で終了することです。あなたはたくさんやりました。デフォルトでは、Bashは履歴をマージせず、2番目のBash-exit .bash_history
は、最初のBash-exitによって非常にうまく更新されたものを上書きします。
これを防ぐには、上書きする代わりに履歴ファイルに追加し、histappend
シェルオプションを使用します。
histappendシェルオプションが有効な場合(以下のSHELL BUILTINコマンドの下のshoptの説明を参照)、行は履歴ファイルに追加されます。そうでない場合、履歴ファイルは上書きされます。
で詳細この回答を使用する方法などHISTSIZE
、HISTFILESIZE
及びHISTCONTROL
、重複などのサイズを制御します
履歴サイズの使用に2つのBASH変数変更するにはHISTSIZE
、HISTFILESIZE
(通常で設定を.bashrc
)。
BASH manページの説明:
HISTSIZE コマンド履歴に記憶するコマンドの数(下記の履歴を参照)。値が0の場合、コマンドは履歴リストに保存されません。ゼロより小さい数値を指定すると、すべてのコマンドが履歴リストに保存されます(制限はありません)。シェルは、起動ファイルを読み込んだ後、デフォルト値を500に設定します。
HISTFILESIZE 履歴ファイルに含まれる最大行数。この変数に値が割り当てられると、必要に応じて履歴ファイルが切り捨てられ、最も古いエントリが削除されてその行数以下になります。履歴ファイルは、シェルの終了時に書き込み後にこのサイズに切り捨てられます。値が0の場合、履歴ファイルはゼロサイズに切り捨てられます。非数値およびゼロより小さい数値は、切り捨てを禁止します。シェルは、起動ファイルを読み込んだ後、デフォルト値をHISTSIZEの値に設定します。
例として、.bashrc
ファイルに次の設定があります。
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
私はこれを起こしたが、解決策はここにリストされていなかった。原因は、単純なコピーと貼り付けの問題でした。別のドキュメントからコマンドをコピーしていて、クリップボードに余分な空白がありました。何らかの理由で、これによりUbuntuはコマンドを履歴ファイルに保存しませんでした。
上の画像は、クリップボード形式のGoogleドキュメントで使用したコマンドです。このコマンドは実行されましたが、私の履歴からは省略されました。戻って、空白なしのコマンドを選択すると、bash履歴に表示されました。
HISTCONTROL
環境変数がignorespace
またはに設定されていないことを確認しますignoreboth
。
$ echo $HISTCONTROL
ignoredups #this is ok
ファイル~/.bash_profile
または~/.profile
ファイルに値を設定することで変更できます。
HISTCONTROL=ignoredups
bash
manページから:
ヒストコントロール
コマンドを履歴リストに保存する方法を制御する値のコロン区切りリスト。
値のリストにが含まれている場合、
ignorespace
スペース文字で始まる行は履歴リストに保存されません。値を指定
ignoredups
すると、前の履歴エントリに一致する行は保存されません。値は、
ignoreboth
の省略形ですignorespace
とignoredups
。値がの場合
erasedups
、現在の行に一致する以前の行はすべて、その行が保存される前に履歴リストから削除されます。上記のリストにない値は無視されます。
HISTCONTROL
が設定されていない場合、または有効な値が含まれていない場合、シェルパーサーによって読み取られたすべての行は、の値に従って履歴リストに保存されますHISTIGNORE
。複数行の複合コマンドの2行目以降はテストされず、の値に関係なく履歴に追加されますHISTCONTROL
。