web-dev-qa-db-ja.com

履歴コマンドが.bash_historyに保存されない場合がある

昨日はCentOS 7で多くのコマンドを発行しましたが、今日これらのコマンドを取得したいのですが、レコードがないことに気づきました。ファイルを開いたとき.bash_history、昨日発行したコマンドはまだ見つかりませんでしたが、数日前に多くの古いコマンドを見つけました。最近のコマンドが保存されなかったのはなぜですか?履歴機能を増やすにはどうすればよいですか?

21
Jack

履歴アイテムが表示されない原因として最も可能性が高いのは、HISTFILEをなしまたはHISTSIZEをゼロに設定することではなく、同じマシンに2回ログインして2番目のbashインスタンスで終了することです(たくさんやった後)デフォルトでは、Bashは履歴をマージせず、2番目のBash出口は、最初のBash出口によって非常に適切に更新された.bash_historyを上書きします。

これが発生しないようにするには、上書きする代わりに履歴ファイルに追加できます。histappendシェルオプションを使用できます。

Histappendシェルオプションが有効になっている場合(以下のシェルの組み込みコマンドの下のshoptの説明を参照)、行が履歴ファイルに追加されます。それ以外の場合、履歴ファイルは上書きされます。

詳細は this answer で、HISTSIZEHISTFILESIZEHISTCONTROLを使用してサイズや重複を制御する方法などが含まれます。

11
Anthon

履歴サイズを変更するには、2つのBASH変数HISTSIZEHISTFILESIZEを使用します(通常、.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
3
coffeMug

私はこれを経験しましたが、解決策はここにリストされていませんでした。原因は、単純なコピーと貼り付けの問題だけでした。別のドキュメントからコマンドをコピーしていて、クリップボードに余分な空白がありました。何らかの理由で、これによりUbuntuはコマンドを履歴ファイルに保存しませんでした。

enter image description here

上の画像は、クリップボードフォームgoogle docsにあったコマンドです。このコマンドは実行されましたが、私の履歴から省略されました。私は戻って空白なしでコマンドを選択したところ、bashの履歴に表示されました。

1
Tycon

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の値に関係なく履歴に追加されます。

1
gawi