[解決済み】bash HISTSIZE vs. HISTFILESIZE?
質問
の違いは何ですか?
HISTSIZE
vs.
HISTFILESIZE
?
これらは、bashの履歴をデフォルトの500行を越えて拡張するために使用されます。
なぜこの2つが必要なのか、ここや他のフォーラムでは明確になっていないようです。( 例1 , 例2 , 例3 ).
どのように解決するのですか?
簡単にお答えします。
HISTSIZE
は、bashセッションが進行している間、履歴リストでメモリに保存される行またはコマンドの数です。
HISTFILESIZE
は、(a) セッションの起動時に履歴ファイルへの保存が許可され、(b) bash セッションの終了時に将来のセッションで使用するために履歴ファイルに保存される行またはコマンドの数を指定します。
の区別に注意してください。
file
とは異なり、ディスク上の
list
: メモリー内
長い回答です。
上記のすべての情報+いくつかの例。
例1
:
HISTFILESIZE=10
と
HISTSIZE=10
- セッションを開始します。
- HISTFILE (bashコマンドの履歴を保存するファイル) は、HISTFILESIZE=10行に切り詰められる。
- 50行書きました。
- 50個のコマンドが終了した時点で、41から50のコマンドだけが、HISTSIZE=10で決定されるサイズの履歴リストに残っています。
- セッションを終了します。
-
想定されること
histappend
が有効でない場合、コマンド 41 から 50 は HISTFILE に保存されます。HISTFILE には、最初に保持していた 10 個のコマンドと新たに書き込んだ 10 個のコマンドが保存されます。 - HISTFILEは、HISTFILESIZE=10行に切り詰められます。
- 現在、あなたの履歴には10個のコマンドがあります。これは、あなたが終了したばかりのセッションで入力した最後の10個です。
- 新しいセッションを開始すると、HISTFILEがHISTFILESIZE=10で1からやり直しになります。
例2
:
HISTFILESIZE=10
と
HISTSIZE=5
- セッションを開始します。
- HISTFILE (bashコマンドの履歴を保存するファイル) は、最大でHISTFILESIZE=10行に切り詰められる。
- 50行書きました。
- 50個のコマンドが終了した時点で、46から50のコマンドだけが、HISTSIZE=5で決定されるサイズの履歴リストに残っています。
- セッションを終了します。
-
想定されること
histappend
が有効でない場合、コマンド46から50がHISTFILEに保存され、最初に持っていた10個のコマンドと新しく書き込まれた5個のコマンドが保存されます。 - HISTFILEは、HISTFILESIZE=10行に切り詰められます。
- 現在、履歴には10個のコマンドがあります。以前のセッションで入力した5個と、終了したばかりのセッションで入力した最後の5個です。
- 新しいセッションを開始すると、HISTFILEがHISTFILESIZE=10で1からやり直しになります。
例3
:
HISTFILESIZE=5
と
HISTSIZE=10
- セッションを開始します。
- HISTFILE (bashコマンドの履歴を保存するファイル) は、最大でHISTFILESIZE=5行に切り詰められる。
- 50行書きました。
- 50個のコマンドが終了した時点で、41から50のコマンドだけが、HISTSIZE=10で決定されるサイズの履歴リストに残っています。
- セッションを終了します。
-
想定されること
histappend
が有効でない場合、コマンド 41 から 50 は HISTFILE に保存されます。HISTFILE には、最初に保持していた 5 つのコマンドと新たに書き込んだ 10 個のコマンドが保存されます。 - HISTFILEは、HISTFILESIZE=5行に切り詰められます。
- 現在、履歴には5つのコマンドがあります。これは、先ほど終了したセッションで入力した最後の5つのコマンドです。
- 新しいセッションを開始するときは、HISTFILEをHISTFILESIZE=5にして、ステップ1からやり直します。
情報元 エリクサーシナリ :
コマンドを入力しても、履歴ファイル("file")は更新されません。コマンドを入力しても更新されません。 コマンドは、別途 "list" に保存されます(history でアクセス可能)。 コマンドを使用します)。この保存されるコマンドの数は HISTSIZE値。シェル(対話型)が終了するとき、最後の その "list" から $HISTSIZE 行が $HISTFILE にコピー/追加されます。 HISTFILESIZEが設定されている場合、この操作の後、以下のことが保証されます。 HISTFILE に存在するのは $HISTFILESIZE 行(最新)だけであること。また シェルを起動すると、リストが$HISTFILEから$quot;list"まで初期化されます。 コマンドの最大数です。
そして、その中から
man bash
のページをご覧ください。
値 は、履歴リストに保存するコマンドの数として使用されます。 最後のHISTSIZEコマンドのテキストは (デフォルト500)が保存されます。 (...)
起動時に、変数 HISTFILE で指定されたファイル (デフォルトは ~/.bash_history) からヒストリを初期化します。 で指定されたファイルが初期化されます。 HISTFILEの値は 必要に応じて、HISTFILESIZEの値で指定された行数を超えないように切り詰めます。 (...) 対話型シェルが終了するとき,最後の $HISTSIZE 行は はヒストリーからコピーされます。 のリストを$HISTFILEにコピーします。 histappend シェル・オプションが有効な場合 (以下の SHELL BUILTIN COMMANDS の shopt の説明を参照)、この 行が追加されます。 そうでない場合は上書きされます。 HISTFILEが設定されていない場合、またはヒストリーファイルが書き込み不可能な場合、ヒストリー は保存されません。(...) 履歴を保存した後、その ヒストリーファイルは切り捨てられる は,HISTFILESIZE 行以下になるようにする。 HISTFILESIZE が設定されていない場合,切り捨ては行われない。
関連
-
[解決済み] etc/profileでVISIBLE=NOWを設定するのはなぜですか?
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bash prints リテラルの改行をエコーする \n
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashでファイルの中身をループする
-
[解決済み】Bashでファイル名と拡張子を抽出する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】bashでjsonファイルを解析するために、jqの出力にあるダブルクオートを削除する方法は?
-
[解決済み】ZIPエラー - 何もできない
-
[解決済み】ログアウトと再ログインをせずに.bashrcの設定を再読み込みする方法?
-
[解決済み] Docker ubuntu イメージ - bash: man: コマンドが見つかりません。
-
[解決済み] bashの文字列の等値性テストで、予期しない演算子エラーが発生するのはなぜですか?重複
-
[解決済み] 値がベースに対して大きすぎる(エラートークンは "08")[重複]
-
[解決済み] シェルスクリプトで整数式が期待されるエラー
-
[解決済み] awkシステムコール
-
[解決済み] bash file returns unexpected token `$'dottpr''
-
[解決済み】無制限のBash履歴【終了しました