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


20

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


端末が異常終了した場合、履歴が保存されない場合がありますが、それは私にも起こりましたが、この動作を引き起こしている状況がわかりません
-mazs

回答:


11

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

これを防ぐには、上書きする代わりに履歴ファイルに追加し、histappendシェルオプションを使用します。

histappendシェルオプションが有効な場合(以下のSHELL BUILTINコマンドの下のshoptの説明を参照)、行は履歴ファイルに追加されます。そうでない場合、履歴ファイルは上書きされます。

で詳細この回答を使用する方法などHISTSIZEHISTFILESIZE及びHISTCONTROL、重複などのサイズを制御します


3

履歴サイズの使用に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

1

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

ここに画像の説明を入力してください

上の画像は、クリップボード形式のGoogleドキュメントで使用したコマンドです。このコマンドは実行されましたが、私の履歴からは省略されました。戻って、空白なしのコマンドを選択すると、bash履歴に表示されました。


5
履歴オプションの1つは、スペースで始まる行を無視する(保存しない)ことです。通常はデフォルトでオンになっています。これは.bashrcで変更できます。
スタド

1

HISTCONTROL環境変数がignorespaceまたはに設定されていないことを確認しますignoreboth

$ echo $HISTCONTROL
ignoredups  #this is ok

ファイル~/.bash_profileまたは~/.profileファイルに値を設定することで変更できます。

HISTCONTROL=ignoredups

bashmanページから:

ヒストコントロール

コマンドを履歴リストに保存する方法を制御する値のコロン区切りリスト。

値のリストにが含まれている場合、ignorespaceスペース文字で始まる行は履歴リストに保存されません。

値を指定ignoredupsすると、前の履歴エントリに一致する行は保存されません。

値は、ignorebothの省略形ですignorespaceignoredups

値がの場合erasedups、現在の行に一致する以前の行はすべて、その行が保存される前に履歴リストから削除されます。

上記のリストにない値は無視されます。

HISTCONTROL が設定されていない場合、または有効な値が含まれていない場合、シェルパーサーによって読み取られたすべての行は、の値に従って履歴リストに保存されますHISTIGNORE。複数行の複合コマンドの2行目以降はテストされず、の値に関係なく履歴に追加されますHISTCONTROL

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.