GNU/Linux >> Linux の 問題 >  >> Linux

方法:無制限の Bash/シェル履歴?

これを .bashrc に追加します (Linux) または .bash_profile (MacOS):

export HISTFILESIZE=
export HISTSIZE=

ほら、無限の歴史。現在、27000 のエントリがあります :)

man bash から :

<ブロック引用>

HISTFILESIZE の場合 が設定されていない場合、切り捨ては実行されません。

つまり .bash_history 切り捨てられません

HISTSIZE にも同じことが当てはまるようです 、文書化されたものは見つかりませんでしたが.

私が試してみたいもう 1 つの便利な機能は次のとおりです。

<ブロック引用>

HISTTIMEFORMAT の場合 変数が設定されると、タイム スタンプが履歴ファイルに書き込まれ、履歴コメント文字でマークされるため、次のようにシェル セッション間で保持される可能性があります:

export HISTTIMEFORMAT="%F %T "

すでに試したことがあれば教えてください...


(https://stackoverflow.com/a/19533853/128597 からの回答を再投稿)

何年にもわたって大規模で醜いイテレーションと奇妙なエッジ ケースを何度も繰り返した後、.bashrc にこれ専用の簡潔なセクションを作成しました。

まず、コメント アウトするか、.bashrc のこのセクションを削除する必要があります。 (Ubuntu のデフォルト)。そうでない場合は、特定の環境 (screen の実行など) セッション) は引き続き履歴を切り捨てます:

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000

次に、これを追加 .bashrc の一番下に:

# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# https://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"

注:すべてのコマンドは実行直後に書き込まれるため、誤ってパスワードを貼り付けた場合、履歴の書き込みを回避するために「kill -9 %%」することはできず、手動で削除する必要があります。

また、各 bash セッションは完全な履歴ファイルをメモリにロードすることに注意してください。 時間)、bash の起動時間への影響はほとんどありません。


~/.bashrc に含める :

# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=

この回答は次の基準を満たしています:

<オール>
  • 個別のマスター履歴 (どのセッションも履歴を中断できません)

  • 自動履歴書き込み (ホットキーなし)

  • まれな書き込み (各コマンドの後に追加しない)

  • 背景

    インタラクティブな起動時、$HISTFILESIZE の場合 数値に設定すると、bash は $HISTFILE を切り捨てます その番号に。シェル オプション histappend の場合、対話型の終了時 が設定されている場合、bash は $HISTSIZE を追加します $HISTFILE までの行 、それ以外の場合は $HISTFILE を上書きします .

    OSX (ターミナル) のヒント

    ターミナルでタブが作成されるたびに、~/.bash_profile これは、bash が ~/.bashrc を読み取らないことを意味します .次の行を ~/etc/bash_profile に追加します :

    # if bashrc has content, source it
    [[ -s ~/.bashrc ]] && . ~/.bashrc
    

    画面のヒント

    screen を使用する場合、構成ファイルは ~/.screenrc です。 screen に履歴を記録させたい場合は、ログイン シェルを使用するように設定するだけで済みます。ログイン シェルは、bash の起動ファイルを取得します (そして履歴を記録します)。

    # use bash, make it a login shell
    defshell -bash
    

    Linux
    1. Bashは、どのように呼び出されているかをどのように知っていますか?

    2. 壊れた歴史?

    3. cronシェルを変更する方法(shからBash)?

    1. Bashシェルスクリプトで文字列を比較する方法

    2. CentOS / RHEL :BASH シェルの履歴を無効にする方法

    3. bash で履歴の編集を無効にする方法

    1. LinuxでBASHコマンドライン履歴をクリアする方法

    2. LinuxでBashの履歴をクリアする方法

    3. タイプアヘッドをBash履歴検索(ctrl-r)に適用するにはどうすればよいですか?