Bash:ピアがSSH接続をリセットした後に記録が失われました。履歴を保存する方法は?

Bash:ピアがSSH接続をリセットした後に記録が失われました。履歴を保存する方法は?

私のエントリには.bashrc以下を追加しました。

# https://stackoverflow.com/a/40158199/9881330
function rescue_history {
    history -a
}
trap rescue_history SIGHUP

ただし、client_loop: send disconnect: Connection reset by peerその後も記録が失われるため、この方法は機能しません。入力したすべての便利なコマンドが失われるので、これは非常に迷惑です!

.bashrc重要な質問:ピアによってSSH接続がリセットされたときに履歴レコードを保存するように設定する方法は?

この「記録保存」動作がデフォルトで有効になっていないことは非常に混乱しています。

私も.bashrcこれを持っています(助けになれば):

# new history settings
# http://jesrui.sdf-eu.org/remember-all-your-bash-history-forever.html
HISTTIMEFORMAT='%F %T '
HISTFILESIZE=-1
HISTSIZE=-1
HISTCONTROL=ignoredups
#HISTIGNORE=?:??      # lines with one or two characters are discarded from the history (e.g. ls commands)
shopt -s histappend  # append to history, don't overwrite it
# attempt to save all lines of a multiple-line command in the same history entry
shopt -s cmdhist
# save multi-line commands to the history with embedded newlines
shopt -s lithist

答え1

特殊変数を使用してコマンドを入力するたびにコマンドを実行できますPROMPT_COMMANDhistory -a

PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND/%;};}history -a"

これにより、同時セッションのコマンドが混在して混乱するロールバックが発生する可能性があります。

この問題を克服するために、各セッションのホームディレクトリに時間、tty、およびpidタグファイルを生成する必要がある少し複雑なバージョンがあります。

SESSION_HISTORY_FILE="${HOME}/bash_history_$(date -d "$(ps -olstart= -p$$ | awk '{print $2,$3,$5,$4}')" +%F_%H-%M-%S)$(tty | tr / _)_$$"
PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND/%;};}history -a '${SESSION_HISTORY_FILE}'"

ここでのアイデアは、実行されたコマンドの正しいコンテキストレコードを生成することです。

終了したセッションの場合は、後ろにスクロールしてもその項目は表示されません(追加しない限り;history -a)。

関連情報